三个Java线程(使用线程池)交替打印1到75个数的两种解法
2012-12-10 09:53
686 查看
解法一:
解法二:
http://blog.csdn.net/lyx2007825/article/details/7767408
还有另外一个解法: package net.liuyx.test; import java.util.ArrayList; import java.util.List; 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 Test { private static final int TASK_NUM = 3; private static int num = 0; private static int flag = 0; private static Lock lock = new ReentrantLock(); private static List<Condition> list = new ArrayList<Condition>(); private static ExecutorService exec = Executors.newCachedThreadPool(); static { for(int i = 0; i < TASK_NUM; i++){ list.add(lock.newCondition()); } } private static void crit() { if (num >= 75) { System.exit(1); } } private static void print() { crit(); System.out.print(Thread.currentThread()); for (int i = 0; i < 5; i++) { System.out.format("%-2d ", ++num); } System.out.println(); } private static void work(int i) { while (!Thread.interrupted()) { try{ lock.lock(); if(flag == i){ crit(); print(); flag = (i + 1) % list.size(); list.get((i+1)%list.size()).signal(); }else{ try { list.get(i%list.size()).await(); } catch (InterruptedException e) { e.printStackTrace(); } } }finally{ lock.unlock(); } } } private static class Task implements Runnable { private final int i; public Task(int i) { this.i = i; } @Override public void run() { work(i); } } /** * @param args */ public static void main(String[] args) { for (int i = 0; i < list.size(); i++) exec.execute(new Task(i)); } }
解法二:
http://blog.csdn.net/lyx2007825/article/details/7767408
相关文章推荐
- 三个Java线程(使用线程池)交替打印1到75个数的两种解法
- 使用Java线程并发库实现两个线程交替打印的线程题
- 详解使用synchronized解决三个线程依次轮流打印出75个数
- 使用Java线程并发库实现两个线程交替打印的线程题
- 使用Lock,Condition解决三个线程依次轮流打印出75个数
- java中使用ReentrantLock锁中的Condition实现三个线程之间通信,交替输出信息
- java使用三个线程,按顺序线程1输出1、线程2输出2、线程3输出3
- Java 多线程 子线程 交替打印 奇偶数
- java wait()方法notifyAll()方法实现三个线程打印A,B,C字符
- 有三个线程名字分别是A、B、C,每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次。不准使用线程的sleep()
- java多线程面试题:三个线程顺序打印ABC,重复10次
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java 线程上机题 循环唤醒 三个线程轮流打印 顺序 A线程->B线程->C线程
- java三线程交替打印123……n
- JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介,线程邮件发送实例
- 三个Java多线程循环打印递增的数字,每个线程打印5个数值,打印周期1-75
- Java使用线程池和线程工厂
- 三个线程轮流执行顺序打印ABC(一):使用Semaphore实现
- 一个关于线程的经典面试题,要求用三个线程,按顺序打印1,2,3,4,5.... 71,72,73,74, 75. 线程1先打印1,2,3,4,5, * 然后是线程2打印6,7,8,9,10, 然后是
- java学习——线程启动的两种方法,Time定时器,synchronized 的使用