【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。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态