多线程实现有序输出10次ABC
Lock 和 Condition 同步机制实现
public class Demo1 {
public static void main(String[] args) {
ABC abc=new ABC();
Thread aa=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<10;i++)
abc.prinA();
}
});
Thread bb=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<10;i++)
abc.prinB();
}
});
Thread cc=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<10;i++)
abc.prinC();
}
});
aa.start();
bb.start();
cc.start();
}
}
class ABC {
String s="C";//标记,await条件
private static final Lock lock=new ReentrantLock();
private Condition Acon=lock.newCondition();
private Condition Bcon=lock.newCondition();
private Condition Ccon=lock.newCondition();
public void prinA() {
lock.lock();
try {
while(s!="C") {
Acon.await();
}
System.out.print("A");
s="A";
Bcon.signal();
}catch(Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
public void prinB() {
lock.lock();
try {
while(s!="A") {
Bcon.await();
}
System.out.print("B");
s="B";
Ccon.signal();
}catch(Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
public void prinC() {
lock.lock();
try {
while(s!="B") {
Ccon.await();
}
System.out.println("C");
s="C";
Acon.signal();
}catch(Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
本文介绍了一种使用Java的Lock和Condition同步机制实现多线程环境下有序输出ABC的方法。通过三个线程分别输出A、B、C字符,利用信号量和等待条件确保输出顺序正确,实现了10次循环的有序输出。
1145

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



