欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

三个线程交替执行,三个线程执行,package cn.i

来源: javaer 分享于  点击 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
相关栏目:

用户点评