public class ABC2 {
private static Lock lock = new ReentrantLock();
private static int count = 0;
private static Condition A = lock.newCondition();
private static Condition B = lock.newCondition();
private static Condition C = lock.newCondition();
public static class A implements Runnable {
@Override
public void run() {
lock.lock();
try {
for (int i = 0; i < 10; i++) {
while (count % 3 != 0) {
A.await();
}
System.out.print("A");
count++;
B.signal();
}
}
catch(InterruptedException e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
public static class B implements Runnable {
@Override
public void run() {
lock.lock();
try {
for (int i = 0; i < 10; i++) {
while (count % 3 !=1) {
B.await();
}
System.out.print("B");
count++;
C.signal();
}
}
catch(InterruptedException e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
public static class C implements Runnable {
@Override
public void run() {
lock.lock();
try {
for (int i = 0; i < 10; i++) {
while (count % 3 != 2) {
C.await();
}
System.out.println("C");
count++;
A.signal();
}
}
catch(InterruptedException e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
public static void main(String[] args) {
Thread a=new Thread(new A());
a.start();
Thread b=new Thread(new B());
b.start();
Thread c=new Thread(new C());
c.start();
}
}
分享到:
相关推荐
java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...
使用多线程和阻塞队列实现了ABC字母按顺序轮流打印
现场交替访问、等待和唤醒
这个例子展示了Java多线程的同步机制,包括synchronized关键字用于控制并发访问,以及wait()和notify()方法用于线程间的通信和协作。这些概念对于理解和解决多线程环境下的同步问题至关重要,是Java程序员必备的技能...
总结来说,这个实验主要涉及了以下几个Java多线程的关键知识点: 1. 进程与线程的概念及其关系。 2. Java中的Thread类和线程的创建与启动。 3. 使用synchronized关键字进行线程同步和互斥。 4. wait()和notify()方法...
50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...
50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...
50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...
50、多线程有几种实现方法?同步有几种实现方法? 36 51、启动一个线程是用run()还是start()? . 37 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 37 53、线程的基本概念...
50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...
50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...
50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本...