# condition实现三个线程顺序执行《2》

467人阅读 评论(0)

public class ThreeConditionCommunication {

/**
* @param args
*/
public static void main(String[] args) {

@Override
public void run() {

for (int i = 1; i <= 50; i++) {
}
}
}).start();

@Override
public void run() {

for (int i = 1; i <= 50; i++) {
}
}
}).start();

for (int i = 1; i <= 50; i++) {
}
}

Lock lock = new ReentrantLock();
//同上一个例子差不多，实现三个conditons 一个锁内部可以有多个Condition，即有多路等待和通知
Condition condition1 = lock.newCondition();
Condition condition2 = lock.newCondition();
Condition condition3 = lock.newCondition();
private int shouldSub = 1;

public void sub2(int i) {
lock.lock();
try {
while (shouldSub != 2) {
try {
condition2.await();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int j = 1; j <= 10; j++) {
System.out.println("sub2 thread sequence of " + j
+ ",loop of " + i);
}
shouldSub = 3;
condition3.signal();
} finally {
lock.unlock();
}
}

public void sub3(int i) {
lock.lock();
try {
while (shouldSub != 3) {
try {
condition3.await();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int j = 1; j <= 20; j++) {
System.out.println("sub3 thread sequence of " + j
+ ",loop of " + i);
}
shouldSub = 1;
condition1.signal();
} finally {
lock.unlock();
}
}

public void sub1(int i) {
lock.lock();
try {
while (shouldSub != 1) {
try {
condition1.await();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int j = 1; j <= 100; j++) {
System.out.println("sub1 thread sequence of " + j
+ ",loop of " + i);
}
shouldSub = 2;
condition2.signal();
} finally {
lock.unlock();
}
}
}
}

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：99340次
• 积分：1693
• 等级：
• 排名：千里之外
• 原创：56篇
• 转载：58篇
• 译文：1篇
• 评论：17条
评论排行
最新评论