三个线程交替执行,三个线程执行,package cn.i
分享于 点击 44523 次 点评:115
三个线程交替执行,三个线程执行,package cn.i
package cn.itcast.gz;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 第一个线程循环5次,接着第二个线程循环10次, * 接着第三个线程循环15次,然后又到第一个线程循环5次 * 如此往复执行50次 * */public class Interview3 { public static void main(String[] args) { ThreadTest3 threadTest3 = new ThreadTest3(); Thread t1 = new Thread(threadTest3); Thread t2 = new Thread(threadTest3); Thread t3 = new Thread(threadTest3); t1.start(); t2.start(); t3.start(); } }class ThreadTest3 implements Runnable{ private Lock lock = new ReentrantLock(); private int j = 0; private int k = 1; Condition con1 = lock.newCondition(); Condition con2 = lock.newCondition(); Condition con3 = lock.newCondition(); public void father() { lock.lock(); try { while(j!=0) con1.await(); for(int i = 1;i<=5;i++) { System.out.println("Thread A..."+i); } j=(j+1)%3; con2.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public void son() { lock.lock(); try { while(j!=1) con2.await(); for(int i = 1;i<=10;i++) { System.out.println("Thread B..."+i); } j=(j+1)%3; con3.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public void granson() { lock.lock(); try { while(j!=2) con3.await(); for(int i = 1;i<=15;i++) { System.out.println("Thread C..."+i); } j=(j+1)%3; con1.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } @Override public void run() { for(int i = 0;i<3;i++) { if(k==1) { father(); k=(k+1)%3; } else if(k==2) { son(); k=(k+1)%3; } else { granson(); k=(k+1)%3; } } /* father(); son(); granson();*/ }}//该片段来自于http://byrx.net
用户点评