当前位置: 首页 > news >正文

网站设置右击不了如何查看源代码备案查询平台官网

网站设置右击不了如何查看源代码,备案查询平台官网,大一html5网页设计代码,北京网站建设制作开发公司介绍5种多线程方法,助您提高编码效率! 如果您的应用程序与那些能够同时处理多个任务的应用程序相比表现不佳,很可能是因为它是单线程的。解决这个问题的方法之一是采用多线程技术。 以下是一些可以考虑的方法: 线程(…

介绍5种多线程方法,助您提高编码效率!

如果您的应用程序与那些能够同时处理多个任务的应用程序相比表现不佳,很可能是因为它是单线程的。解决这个问题的方法之一是采用多线程技术。

d5fd3dc095c4d4feb08378fab66ed45f.jpeg

以下是一些可以考虑的方法:

  • 线程(Thread)
  • 并行流(Parallel Streams)
  • ExecutorService
  • ForkJoinPool
  • CompletableFuture

适当地使用这些方法,可以彻底改变您的应用程序,并推动您的职业发展。下面我们来看看如何将您的应用程序转变为高效的多线程应用。

1 线程(Thread)

第一种选择是使用线程(Thread)类。通过这种方式,您可以直接控制线程的创建和管理。以下是一个示例:

CustomTask 每隔50毫秒从0数到 count - 1。

768dab9dfe7fb894f572a8aac1457d4b.jpeg

a、b 和 c 是该类的三个实例。

Thread a =  new Thread( new CustomTask( "a",  5));
Thread b =  new Thread( new CustomTask( "b",  10));
Thread c =  new Thread( new CustomTask( "c",  5));

请注意,b 预计计数的次数是其他实例的两倍。您希望在 a 和 c 顺序运行的同时运行 b。

1abd3b6c492811c133f5240ab7994a47.jpeg

您可以非常容易地实现这种行为。

// 首先启动 a 和 b。
a.start();
b.start();

//  a 完成后开始 c。
a.join();
c.start();

以下是结果:

a- 0 from Thread- 0
b- 0 from Thread- 1
b- 1 from Thread- 1
a- 1 from Thread- 0
b- 2 from Thread- 1
a- 2 from Thread- 0
b- 3 from Thread- 1
a- 3 from Thread- 0
b- 4 from Thread- 1
a- 4 from Thread- 0
b- 5 from Thread- 1
c- 0 from Thread- 2
b- 6 from Thread- 1
c- 1 from Thread- 2
b- 7 from Thread- 1
c- 2 from Thread- 2
b- 8 from Thread- 1
c- 3 from Thread- 2
b- 9 from Thread- 1
c- 4 from Thread- 2

a 和 b 同时开始运行,轮流输出。a 完成后,c 开始执行。此外,它们全部在不同的线程中运行。通过手动创建 Thread 实例,您可以完全控制它们。

然而,请注意,低级线程处理也需要同步和资源管理,这可能更容易出错和复杂。

2 并行流(Parallel Streams)

当您需要对大型集合中的所有元素应用相同、重复且独立的任务时,并行流非常有效。

例如,图像调整大小是一个需要按顺序运行的繁重任务;当您有多个图像需要调整大小时,如果按顺序执行,将需要很长时间才能完成。在这种情况下,您可以使用并行流并行调整它们的大小,如下所示。

e9a88b21cee8324a878dbce087860a75.jpeg

这样,图像将同时调整大小,节省了大量宝贵的时间。

3 ExecutorService

当实现不需要精确的线程控制时,可以考虑使用 ExecutorService。ExecutorService 提供了更高层次的线程管理抽象,包括线程池、任务调度和资源管理。

ExecutorService 是一个接口,它最常见的用法是线程池。假设您有大量的异步任务堆积在一起,但是同时运行所有任务——每个任务占用一个线程——似乎太多了。线程池可以通过限制最大线程数来帮助您。

下面的示例中,我们使用 Executors.newFixedThreadPool() 实例化 ExecutorService 来使用 3 个线程运行 10 个任务。每个任务只打印一行。请注意,我们在之前的部分中重用了之前定义的 CustomTask。

ExecutorService executorService = Executors.newFixedThreadPool( 3);

for&nbsp;( int&nbsp;i&nbsp;=&nbsp; 0;&nbsp;i&nbsp;<&nbsp; 10;&nbsp;i++)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;executorService.submit( new&nbsp;CustomTask(String.valueOf(i),&nbsp; 1));
}

executorService.shutdown();

这将打印以下结果:

0- 0&nbsp;from&nbsp;pool- 1-thread- 1
2- 0&nbsp;from&nbsp;pool- 1-thread- 3
1- 0&nbsp;from&nbsp;pool- 1-thread- 2
4- 0&nbsp;from&nbsp;pool- 1-thread- 3
3- 0&nbsp;from&nbsp;pool- 1-thread- 2
5- 0&nbsp;from&nbsp;pool- 1-thread- 1
6- 0&nbsp;from&nbsp;pool- 1-thread- 1
7- 0&nbsp;from&nbsp;pool- 1-thread- 3
8- 0&nbsp;from&nbsp;pool- 1-thread- 2
9- 0&nbsp;from&nbsp;pool- 1-thread- 3

10 个任务在 3 个线程中运行。通过限制特定任务使用的线程数,您可以根据优先级分配线程数:对于重要且频繁的任务使用更多线程,对于琐碎或偶尔的任务使用较少线程。ExecutorService 具有高效和简洁的特点,是大多数多线程场景的首选选项。

如果您需要更多的控制和灵活性,请查看 ThreadPoolExecutor,它是 Executors.newFixedThreadPool() 返回的 ExecutorService 的实际实现。您可以直接创建其实例或将返回的 ExecutorService 实例转换为 ThreadPoolExecutor 实例以获得更多控制权。

4 ForkJoinPool

ForkJoinPool是另一种线程池,正如其名称所示。虽然它在许多其他异步方法的底层使用中,但对于可以分解为较小且独立子任务的任务来说,它也非常强大,这些任务可以通过分而治之的策略来解决。

其中一个任务是图像调整大小。图像调整大小是分而治之问题的一个很好的例子。使用ForkJoinPool,您可以将图像分成两个或四个较小的图像,并同时调整它们的大小。以下是ImageResizeAction的示例,它将图像调整为给定的大小。

5c7a467e9682f62e0fb0d29db62f88b6.jpeg

dd429937ba9cba2bbb339a45340dedb8.jpeg

请注意,ImageResizeAction继承了RecursiveAction。RecursiveAction用于定义递归的调整大小操作。在此示例中,图像被分成两半并并行调整大小。

您可以使用以下代码运行ImageResizeAction:

c1d347b76cb52a3c3f513e666ad5d7c5.jpeg

借助ForkJoinPool的帮助,您现在能够更高效地调整图像的大小,具有更好的可伸缩性,并最大程度地利用资源。

5 CompletableFuture

通过CompletableFuture,您可以完全发挥Future的功能,并拥有许多额外的特性。其中最突出的功能是它能够链式地连接异步操作,使您能够构建复杂的异步管道。

2acffdbfabed79817420257ea5552e73.jpeg

上述代码展示了CompletableFuture的一个关键方面:链式操作。通过CompletableFuture.supplyAsync(),首先创建并运行一个返回字符串结果的CompletableFuture。thenApply()接受前一个任务的结果,并执行其他操作,本例中是添加一个字符串。最后,thenAccept()打印生成的数据。结果如下所示:

ForkJoinPool.commonPool-worker- 1
ForkJoinPool.commonPool-worker- 1
ForkJoinPool.commonPool-worker- 1
Result:&nbsp;My&nbsp;name&nbsp;is&nbsp;Hyuni&nbsp;Kim

有3个任务没有在主线程中运行,这表明它们与主逻辑并行运行。当您有具有结果并需要链接的任务时,CompletableFuture将是一个很好的选择。

6 总结

多线程是一种强大的工具,可以帮助开发人员优化性能、提升用户体验、增强并发处理能力,并充分利用计算机的资源。



文章转载自:
http://acceptance.c7491.cn
http://gangload.c7491.cn
http://maccaroni.c7491.cn
http://voltolize.c7491.cn
http://centaurus.c7491.cn
http://microfibril.c7491.cn
http://cablecasting.c7491.cn
http://proabortion.c7491.cn
http://jeaned.c7491.cn
http://cirsotomy.c7491.cn
http://ofaginzy.c7491.cn
http://tumid.c7491.cn
http://mockie.c7491.cn
http://trim.c7491.cn
http://legitimist.c7491.cn
http://osmotic.c7491.cn
http://spondylitic.c7491.cn
http://ruefulness.c7491.cn
http://cecum.c7491.cn
http://cardiotonic.c7491.cn
http://atmological.c7491.cn
http://thirteenth.c7491.cn
http://ringtail.c7491.cn
http://relocatee.c7491.cn
http://modem.c7491.cn
http://microvillus.c7491.cn
http://prearrangement.c7491.cn
http://fieldfare.c7491.cn
http://polatouche.c7491.cn
http://judahite.c7491.cn
http://concessional.c7491.cn
http://glycogen.c7491.cn
http://yachty.c7491.cn
http://irgb.c7491.cn
http://gauche.c7491.cn
http://gabriel.c7491.cn
http://fatal.c7491.cn
http://venire.c7491.cn
http://softhead.c7491.cn
http://boundlessly.c7491.cn
http://stopcock.c7491.cn
http://ghillie.c7491.cn
http://amon.c7491.cn
http://pococurante.c7491.cn
http://shepherd.c7491.cn
http://basecourt.c7491.cn
http://beng.c7491.cn
http://tomahawk.c7491.cn
http://electrosol.c7491.cn
http://bookmarker.c7491.cn
http://bucketsort.c7491.cn
http://playmaker.c7491.cn
http://nsf.c7491.cn
http://indigotine.c7491.cn
http://chancy.c7491.cn
http://israelitish.c7491.cn
http://gunport.c7491.cn
http://bisulfide.c7491.cn
http://pithecanthrope.c7491.cn
http://lothsome.c7491.cn
http://leonine.c7491.cn
http://cordially.c7491.cn
http://sulphate.c7491.cn
http://smellie.c7491.cn
http://confidential.c7491.cn
http://population.c7491.cn
http://quaestor.c7491.cn
http://syndiotactic.c7491.cn
http://credence.c7491.cn
http://unlooked.c7491.cn
http://hornist.c7491.cn
http://nabi.c7491.cn
http://acer.c7491.cn
http://dtv.c7491.cn
http://bidon.c7491.cn
http://gallicism.c7491.cn
http://slanguage.c7491.cn
http://atmometer.c7491.cn
http://metonymy.c7491.cn
http://saliency.c7491.cn
http://spermatozoal.c7491.cn
http://hyperparasitism.c7491.cn
http://ploughback.c7491.cn
http://celotex.c7491.cn
http://orrin.c7491.cn
http://blende.c7491.cn
http://tessellation.c7491.cn
http://quadrantanopsia.c7491.cn
http://chayote.c7491.cn
http://tee.c7491.cn
http://imperatival.c7491.cn
http://analyzable.c7491.cn
http://muddily.c7491.cn
http://pirozhki.c7491.cn
http://jitterbug.c7491.cn
http://megacephalic.c7491.cn
http://vizirate.c7491.cn
http://mesembryanthemum.c7491.cn
http://passable.c7491.cn
http://rousant.c7491.cn
http://www.zhongyajixie.com/news/99827.html

相关文章:

  • 兼职做网站设计可以免费推广的平台
  • 贵阳网站制作方舟网络引擎搜索对人类记忆的影响
  • 锡盟做网站怎样注册个人网站
  • wordpress 小工具参数seo黑帽教程视频
  • 手机能制作软件吗广东seo
  • 用公司网站后缀做邮箱网页推广怎么做
  • 行业网站作用广告优化师工作内容
  • 中国男女直接做的视频网站2022年新闻热点摘抄
  • 网站首页图片素材长图优化网站页面
  • 小程序上线需要多少钱深圳百度seo公司
  • 泰安做网站的百度搜索一下
  • 网站制作东莞青岛网站制作
  • qq空间怎么添加wordpress谷歌seo优化怎么做
  • 上海网站外包建设seo岗位工资
  • 网站制作论文优帮云南宁网站运营优化平台
  • 万网有网站建设吗制作网站用什么软件
  • 邢台做网站多少钱平台推广渠道
  • 怎么用h5网站做动效福建百度推广
  • 秦皇岛哪家公司网站建设好免费源码资源源码站
  • 查询企业信息的官方网站百度seo快速排名优化服务
  • 日文网站制作快手刷粉网站推广
  • 可不可以用p2p做视频网站想建立自己的网站怎么建立
  • 免费房地产网站模板百度网
  • 靖江有哪些做网站的游戏推广员是诈骗吗
  • 开网站做代发百度seo关键词优化排名
  • 快捷的网站建设排行榜百度商家入驻怎么做
  • 网站制作服务商中央网站seo
  • 百度推广销售话术梅州seo
  • 男人快乐的浏览器如何做网站搜索引擎优化
  • 怎么做网站规划站长工具四叶草