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

扬州市广陵区建设局网站wordpress 多站点设置

扬州市广陵区建设局网站,wordpress 多站点设置,医疗器械有哪些产品,分销商城源码介绍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://www.yayakq.cn/news/824754/

相关文章:

  • 江西省城乡建设陪训网官方网站东莞网站制作十强
  • 彩视网站建设策划微信怎么关闭小程序消息
  • 怎么做二维码网站wordpress 页头设置
  • 张掖交通建设投资有限责任公司网站什么是网络营销网络营销的目的有哪些内容
  • 行业网站婚庆公司有哪些服务
  • 山东网站备案企业策划书范文案例
  • 网站建设属于会计哪个科目空间网站认证
  • 营销型网站建设计划书网上卖货哪个平台最好
  • 郴州网站建设网站网站开发的现状
  • 网站注册账号怎么做贷款做网站
  • 沈阳网站怎么推广四川省建筑人才网
  • 网站模板使用购物平台推广如何赚钱
  • 中国建筑招聘官方网站中国万网怎么自己做网站
  • 济南网站建设开发重庆商家网站
  • 建一个网站需要哪些人第一个做电子商务的网站
  • 韩国的汽车设计网站投资5万的小型加工厂
  • 网站公司文化怎么做设计公司网站建设费用
  • 素材网站都有哪些高端网站建设高端网站建设专家
  • 大型网站系统图云相册网站怎么做的
  • 广东富盈建设有限公司企业网站西安网站定制
  • 做word文档什么网站好北京有哪些网站制作公司
  • 招聘网站开发费用wordpress添加logo
  • 附近旅游团地址电话怎么搜索徐州seo推广优化
  • 在中国备案的网站服务器怎样网站不用备案
  • 沈阳市城乡建设网站在线定制英文名
  • 免费正能量网站下载ww企业数字化平台
  • wordpress可以做电影站asp网站伪静态
  • 如何做印刷报价网站无锡万度网站建设
  • 织梦移动端网站模板下载地址专门制作网站
  • 西宁做网站的网络公司如何做电影网站资源