public class Resources {
private String name;
private int count =1;
private boolean flag = false;
// wait 和 sleep的区别
//1、wait 可以指定时间也可以不指定
// sleep 必须指定时间
//2、再同步中时,对cpu的执行权和锁的处理不同
// wait 释放执行权,释放锁
// sleep 释放执行权,不释放锁
Lock lock = new ReentrantLock();//创建锁
//获取锁的监视对象
//Condition con = lock.newCondition();
//获取两个监视器,一个监视生产者,一个监视消费者
Condition set_con = lock.newCondition();
Condition qu_con = lock.newCondition();
public void set(String name){
lock.lock();//获取锁
try {
while (flag)
try {
set_con.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
this.name = name +count;
count++;
System.out.println(Thread.currentThread().getName()+"产出:"+name);
flag = true;
qu_con.signalAll();
}finally {
lock.unlock();//释放锁
}
}
public void qu(){
lock.lock();//获取锁
try {
while(!flag)
try {
qu_con.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"消费产品:"+name);
flag = false;
set_con.signalAll();
}finally {
lock.unlock();
}
}
}
多线程 lock
最新推荐文章于 2024-01-01 13:33:54 发布
1408

被折叠的 条评论
为什么被折叠?



