【java】多线程控制(一)---Semaphore、Exchanger、CyclicBarrier、CountDownLatch

 2023-09-06 阅读 14 评论 0

摘要:【Semaphore】 简单说明:信号灯,可以控制某个资源可被同时访问的个数。 使用方法: 1、new一个实例:Semapore sp = new Semapore(num); // num 是可以呗同时访问的数目。 2、需要访问某个资源前,调用acquire(), 尝

【Semaphore】

简单说明:信号灯,可以控制某个资源可被同时访问的个数。

使用方法:

1、new一个实例:Semapore sp = new Semapore(num);    // num 是可以呗同时访问的数目。

2、需要访问某个资源前,调用acquire(), 尝试获取访问许可,如果访问数达到上限,此线程就会被挂起。

3、使用资源后,调用release() ,解除锁定,此时如果有被挂起的线程,就会被唤醒并获得访问许可。

 

【Exchanger】

简单说明:Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。

使用方法:

1、new一个实例:Exchanger exchanger = new Exchanger(); 

2、在第一个线程中,在需要交换的数据的位置,调用exchange(data1),此时线程会被挂起,等待第二个线程也调用交换数据的方法。

3、在第二个线程中,在需要交换的数据的位置,调用exchange(data2),此时两个数据交换完成,两个线程均继续执行。

 

【CyclicBarrier】

简单说明:CyclicBarrier允许一组线程互相等待,直到到达某个标记点。

使用方法:

1、new一个实例:CyclicBarrier cb = new CyclicBarrier(num);    // 互相等待的线程数目

2、在需要集合等待其他线程的位置调用await(),这时这个线程会被挂起,直到调用await()的数目达到num后,继续执行。

ps:同一个线程中可以设置多个集合点。

 

【CountDownLatch】

简单说明:在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

使用方法:

1、new一个实例:CountDownLatch cd = new CountDownLatch(num);   //计数器的数目

2、一个完成任务的线程需要调用countDown(),以此使计数器的数目自减1。

3、需要等待的线程需要调用await(),当计数器减为0后,此线程继续执行。

ps:CountDownLatch只能使用一次,如果有更多的地方也需要这种等待机制,需要建立更多的CountDownLatch。

 

 

 

 

 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/8868.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息