启动三个线程A,B,C,打印10次 按照ABC的顺序输出
2012-04-07 09:48
597 查看
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ABC5 { private int cond = 1;// 通过cond来确定A B C的输出 private Lock lock = new ReentrantLock();// 通过JDK5中的锁来保证线程的访问的互斥 private Condition condition = lock.newCondition();// 线程协作 public static void main(String[] args) { ABC5 abc = new ABC5();// 内部类线程执行方式jdk1.5 ThreadA ta = abc.new ThreadA();// 声明3个runnable类 ThreadB tb = abc.new ThreadB(); ThreadC tc = abc.new ThreadC(); ExecutorService executor = Executors.newFixedThreadPool(3);// 通过线程池执行 for (int i = 0; i < 10; i++) { executor.execute(ta); executor.execute(tb); executor.execute(tc); } executor.shutdown();// 关闭线程池 } class ThreadA implements Runnable { public void run() { lock.lock(); try { while (true) { if (cond % 3 == 1) { System.out.print(cond+":A"); cond++; condition.signalAll(); break; } else { try { condition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } } } finally { lock.unlock(); } } } class ThreadB implements Runnable { public void run() { lock.lock(); try { while (true) { if (cond % 3 == 2) { System.out.print(cond+":B"); cond++; condition.signalAll(); break; } else { try { condition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } } } finally { lock.unlock(); } } } class ThreadC implements Runnable { public void run() { lock.lock(); try { while (true) { if (cond % 3 == 0) { System.out.println(cond+":C"); cond++; condition.signalAll(); break; } else { try { condition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } } } finally { lock.unlock(); } } } }
相关文章推荐
- 有三个线程名字分别是A、B、C,每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次。不准使用线程的sleep()
- 多线程(至少三个线程)分别打印A、B、C,要求按ABC的顺序循环打印10次。
- 有三个线程名字分别是A、B、C,每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次。
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
- java多线程面试题:三个线程顺序打印ABC,重复10次
- 有4个线程A、B、C、D,分别打印1、2、3、4,请同时启动他们,但是要求按照1234的顺序输出结果
- 三个线程分别打印ABC,按顺序输出ABCABC...
- 三个线程循环打印ABC10次的几种解决方法
- 一道Java线程面试题。3个线程顺序打印10次ABC.
- Java多线程:用三个线程控制循环输出10次ABC
- Java多线程:用三个线程控制循环输出10次ABC
- 通过线程按照顺序循环输出ABC n次
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 有三个线程A,B,C 循环10次打印出三个线程的名字ABCABCABCABCABCABCABCABCABCABC
- Java多线程:用三个线程控制循环输出10次ABC
- 第四题(迅雷笔试题):编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 三个线程循环打印ABC10次的几种解决方法