java线程题目

来源:互联网 发布:qq魅力值软件 编辑:程序博客网 时间:2024/06/11 22:53

通过线程按照顺序循环输出ABC n次

根据题目的意思应该是每个线程输出一个字符,按照顺序输出n次。

对于这个题目应该是3个线程。

分析:线程的执行方式是乱序的,需要通过协作才能实现3个线程顺序输出字符。

在jdk1.5中线程的协作是通过Lock/Condition及Samephore/CyclicBarriar/CountLatchDown实现的

import java.util.*;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 ABC {private  int state = 1;private Lock l = new ReentrantLock();private Condition condition = l.newCondition();public static void main(String[] args) {ABC abc =new ABC();A a = abc.new A();B b = abc.new B();C c = abc.new C();ExecutorService executorService=Executors.newFixedThreadPool(3);//释放线程池for(int i=0;i<10;i++){executorService.execute(a);executorService.execute(b);executorService.execute(c);}executorService.shutdown();}class A implements Runnable {public void run() {l.lock();try {while (true) {if (state % 3 == 1) {System.out.println("A");state++;condition.signalAll();break;} else {try {condition.await();} catch (InterruptedException e) {e.printStackTrace();}}}} finally {l.unlock();}}}class B implements Runnable {public void run(){l.lock();try{while(true){if(state%3==2){System.out.println("B");state++;condition.signalAll();break;}else{try{condition.await();}catch (InterruptedException e) {e.printStackTrace();}}}}finally{l.unlock();}}}class C implements Runnable{public void run(){l.lock();try{while(true){if(state%3==0){System.out.println("C");state++;condition.signalAll();break;}else{try{condition.await();}catch (InterruptedException e) {e.printStackTrace();}}}}finally{l.unlock();}}}}


0 0
原创粉丝点击