public static void main(String[] args) {
//资源类
Data3 data3 = new Data3();
new Thread(()->{
for (int i = 0;i<10;i++){
data3.a();
}
},"A").start();
new Thread(()->{
for (int i = 0;i<10;i++){
data3.b();
}
},"B").start();
new Thread(()->{
for (int i = 0;i<10;i++){
data3.c();
}
},"C").start();
}
}
//资源类
class Data3{
ReentrantLock reentrantLock = new ReentrantLock();
//同步监视器
Condition condition1 = reentrantLock.newCondition();
Condition condition2 = reentrantLock.newCondition();
Condition condition3 = reentrantLock.newCondition();
private int number = 1;
public void a(){
reentrantLock.lock();
try {
//业务
while (number!=1){
condition1.await();
}
System.out.println(Thread.currentThread().getName()+"=>>>aaaaaaaaaa");
number=2;
condition2.signal();
} catch (Exception e) {
e.printStackTrace();
} finally {
reentrantLock.unlock();
}
}
public void b(){
reentrantLock.lock();
try {
//业务
while (number!=2){
condition2.await();
}
System.out.println(Thread.currentThread().getName()+"=>bbbbbbbbbb");
number=3;
condition3.signal();
} catch (Exception e) {
e.printStackTrace();
} finally {
reentrantLock.unlock();
}
}
public void c(){
reentrantLock.lock();
try {
//业务
while (number!=3){
condition3.await();
}
System.out.println(Thread.currentThread().getName()+"=>cccccccccccc");
number=1;
condition1.signal();
} catch (Exception e) {
e.printStackTrace();
} finally {
reentrantLock.unlock();
}
}
Condition实现线程之间的精确唤醒
最新推荐文章于 2023-04-12 22:35:18 发布