Java多线程--三个线程分别打印a,b,c.请用多线程实现循环打印15次abc
2017-02-23 22:01
531 查看
扫盲:
想想自己多线程解决生产消费者问题就知道个synchronized,真是惭愧
为做此题目特意学习新的多线程知识–ReentrantLock跟synchronized一样都是Java中的可重入锁(可以在内部锁中拿到外部锁)
Condition是条件的意思,Condition.await()让线程进入等待,Condition.signal()唤醒线程
执行结果:
想想自己多线程解决生产消费者问题就知道个synchronized,真是惭愧
为做此题目特意学习新的多线程知识–ReentrantLock跟synchronized一样都是Java中的可重入锁(可以在内部锁中拿到外部锁)
Condition是条件的意思,Condition.await()让线程进入等待,Condition.signal()唤醒线程
package cn.itchg; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Created by CHG on 2017-02-23 20:20. */ public class PrintABC { int count = 0; //打印次数 Lock lock = new ReentrantLock(); //可重写锁 Condition conditionA = this.lock.newCondition(); Condition conditionB = this.lock.newCondition(); Condition conditionC = this.lock.newCondition(); public class PrintA implements Runnable { @Override public void run() { while (true) if (count < 15) { lock.lock(); System.out.print("A"); try { conditionB.signal(); //线程b唤醒,因为a打印完应该打印b conditionA.await(); //线程a进入等待队列 } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } } public class PrintB implements Runnable { @Override public void run() { while (true) if (count < 15) { lock.lock(); System.out.print("B"); try { conditionC.signal(); conditionB.await(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } } public class PrintC implements Runnable { @Override public void run() { while (true) if (count < 15) { lock.lock(); System.out.println("C" + count); count++;//打印完c后,count++ try { conditionA.signal(); conditionC.await(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } } public static void main(String[] args) { PrintABC printABCD = new PrintABC(); new Thread(printABCD.new PrintA()).start(); new Thread(printABCD.new PrintB()).start(); new Thread(printABCD.new PrintC()).start(); } }
执行结果:
ABC0 ABC1 ABC2 ABC3 ABC4 ABC5 ABC6 ABC7 ABC8 ABC9 ABC10 ABC11 ABC12 ABC13 ABC14 Process finished with exit code 1
相关文章推荐
- 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC
- 迅雷笔试题 (JAVA多线程)启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC
- java实现【有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABC.】
- 多线程(至少三个线程)分别打印A、B、C,要求按ABC的顺序循环打印10次。
- 题目:有三个线程分别打印A、B、C,请用多线程编程实现,在屏幕打印10次ABC
- 有三个线程ID分别是ABC,用多线程编程在屏幕上循环打印ABCABC....十次
- 有三个线程ID分别是A、B、C,请有多线编程 实现 在屏幕上循环打印10次ABCABC......
- Java实现多线程经典问题:使用三个线程实现输出ABCABC循环
- 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC
- Semaphore实现的三个线程协作循环打印10次ABC的方法
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java 实现3个线程 依次打印ABC,并且循环10次
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
- 三个线程循环打印ABC10次的几种解决方法
- 关于线程的面试题:利用三个线程,循环打印ABC三个数十遍
- 多线程题 3个线程各打印一种字母,按顺序打印若干次ABC 的2种实现
- Java多线程:用三个线程控制循环输出10次ABC
- 三个Java多线程循环顺序周期打印1-75个数(用CyclicBarrier实现代码)
- Java多线程:用三个线程控制循环输出10次ABC
- Java多线程:用三个线程控制循环输出10次ABC