我是靠谱客的博主 怕孤单蜗牛,最近开发中收集的这篇文章主要介绍java多线程工具类的使用-------CountDownLatch、Semaphore,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
并发工具类-CountDownLatch
- 应用场景:在有多个线程的情况下,让某一个线程等其他线程运行完后再运行。
- 构造方法;
- public CountDownLatch(int count) :参数传递线程数,表示等待线程数量,表示构造一个用给定计数初始化的CountDownLatch。
- 操作方法:
- public void await() :让线程等待,当锁存器的计数为0时,就运行该线程
- public void countDown() :当前线程执行完毕,递减锁存器的计数
- 代码示例;
package _线程工具类;
import java.util.concurrent.CountDownLatch;
public class Main2 {
public static void main(String[] args) throws InterruptedException {
//让线程1和2运行完后,再运行线程3
//参数传递线程数,需要传递给2个线程。
//在底层就定义了一个计数器,此时计数器的值就是2
CountDownLatch countDownLatch = new CountDownLatch(2);
//开始线程1
new Thread(()->{
System.out.println("线程1开启");
System.out.println("线程1结束");
//每一次countDown方法的时候,就让计数器-1
countDownLatch.countDown();
}).start();
//使用countDownLatch.await();等待的线程,等待其他两个线程运行完,再运行
//等1,2线程运行完后。开启线程3
new Thread(()->{
try {
//当计数器变成0的时候,会自动唤醒这里等待的线程。
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("等待的线程3开启");
}).start();
//开启线程2
new Thread(()->{
System.out.println("线程2开启");
System.out.println("线程2结束");
///每一次countDown方法的时候,就让计数器-1
countDownLatch.countDown();
}).start();
}
}
并发工具类-Semaphore
- 应用场景:可以控制访问特定资源的线程数量。
- 构造方法;
- public Semaphore(int permits) :创建具有给定数量permits的许可证
- 操作方法:
- public void acquire():获得许可证(如果有)并立即返回,将可用许可证的数量减少一个
- public void release() :释放许可证,将可用许可证的数量增加一个。
- 代码场景例子
- 需要有人管理这个通道
- 当有车进来了,发通行许可证
- 当车出去了,收回通行许可证
- 如果通行许可证发完了,那么其他车辆只能等着
- 代码实现示例:
package _线程工具类;
import java.util.concurrent.Semaphore;
public class Main3 {
public static void main(String[] args) throws InterruptedException {
MyRunnable mr = new MyRunnable();
//存在10辆车等待通行证
for (int i = 0; i < 10; i++) {
new Thread(mr).start();
}
}
static class MyRunnable implements Runnable {
//1.获得管理员对象,
private Semaphore semaphore = new Semaphore(2);
@Override
public void run() {
//2.获得通行证
try {
semaphore.acquire();
//3.开始行驶
System.out.println("获得了通行证开始行驶");
Thread.sleep(2000);
System.out.println("归还通行证");
//4.归还通行证
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
最后
以上就是怕孤单蜗牛为你收集整理的java多线程工具类的使用-------CountDownLatch、Semaphore的全部内容,希望文章能够帮你解决java多线程工具类的使用-------CountDownLatch、Semaphore所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复