每轮 aa先打印五次,bb再打印十次,最后cc打印十五次
执行三轮
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; //1.创建资源类 class ShareResource{ //定义标志位 private int flag = 1; //1:aa 2:bb 3:cc //创建lock锁 private Lock lock = new ReentrantLock(); //创建三个condition来控制三个线程 private Condition c1 = lock.newCondition(); private Condition c2 = lock.newCondition(); private Condition c3 = lock.newCondition(); //aa:打印五次 //loop:打印loop轮 public void print5(int loop) throws InterruptedException{ //上锁 lock.lock(); try{ //判断 while(flag != 1){ c1.await(); } //干活 for(int i=0;i<5;i++){ System.out.println(Thread.currentThread().getName()+":"+i+",loop:"+loop); } //通知 flag = 2; c2.signal(); } finally { lock.unlock(); } } //bb:打印十次 //loop:打印loop轮 public void print10(int loop) throws InterruptedException{ //上锁 lock.lock(); try{ //判断 while(flag != 2){ c2.await(); } //干活 for(int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName()+":"+i+",loop:"+loop); } //通知 flag = 3; c3.signal(); }catch (InterruptedException e){ e.printStackTrace(); } finally { lock.unlock(); } } //cc:打印十五次 //loop:打印loop轮 public void print15(int loop) throws InterruptedException{ //上锁 lock.lock(); try{ //判断 while(flag != 3){ c3.await(); } //干活 for(int i=0;i<15;i++){ System.out.println(Thread.currentThread().getName()+":"+i+",loop:"+loop); } //通知 flag = 1; c1.signal(); }catch (InterruptedException e){ e.printStackTrace(); } finally { lock.unlock(); } } } public class ThreadDemo1 { public static void main(String[] args) { ShareResource shareResource = new ShareResource(); new Thread(() ->{ for(int i=0;i<3;i++){ try{ shareResource.print5(i); }catch(Exception e) { e.printStackTrace(); } } },"aa").start(); new Thread(() ->{ for(int i=0;i<3;i++){ try{ shareResource.print10(i); }catch(Exception e) { e.printStackTrace(); } } },"bb").start(); new Thread(() ->{ for(int i=0;i<3;i++){ try{ shareResource.print15(i); }catch(Exception e) { e.printStackTrace(); } } },"cc").start(); } }
执行结果
aa:0,loop:0
aa:1,loop:0
aa:2,loop:0
aa:3,loop:0
aa:4,loop:0
bb:0,loop:0
bb:1,loop:0
bb:2,loop:0
bb:3,loop:0
bb:4,loop:0
bb:5,loop:0
bb:6,loop:0
bb:7,loop:0
bb:8,loop:0
bb:9,loop:0
cc:0,loop:0
cc:1,loop:0
cc:2,loop:0
cc:3,loop:0
cc:4,loop:0
cc:5,loop:0
cc:6,loop:0
cc:7,loop:0
cc:8,loop:0
cc:9,loop:0
cc:10,loop:0
cc:11,loop:0
cc:12,loop:0
cc:13,loop:0
cc:14,loop:0
aa:0,loop:1
aa:1,loop:1
aa:2,loop:1
aa:3,loop:1
aa:4,loop:1
bb:0,loop:1
bb:1,loop:1
bb:2,loop:1
bb:3,loop:1
bb:4,loop:1
bb:5,loop:1
bb:6,loop:1
bb:7,loop:1
bb:8,loop:1
bb:9,loop:1
cc:0,loop:1
cc:1,loop:1
cc:2,loop:1
cc:3,loop:1
cc:4,loop:1
cc:5,loop:1
cc:6,loop:1
cc:7,loop:1
cc:8,loop:1
cc:9,loop:1
cc:10,loop:1
cc:11,loop:1
cc:12,loop:1
cc:13,loop:1
cc:14,loop:1
aa:0,loop:2
aa:1,loop:2
aa:2,loop:2
aa:3,loop:2
aa:4,loop:2
bb:0,loop:2
bb:1,loop:2
bb:2,loop:2
bb:3,loop:2
bb:4,loop:2
bb:5,loop:2
bb:6,loop:2
bb:7,loop:2
bb:8,loop:2
bb:9,loop:2
cc:0,loop:2
cc:1,loop:2
cc:2,loop:2
cc:3,loop:2
cc:4,loop:2
cc:5,loop:2
cc:6,loop:2
cc:7,loop:2
cc:8,loop:2
cc:9,loop:2
cc:10,loop:2
cc:11,loop:2
cc:12,loop:2
cc:13,loop:2
cc:14,loop:2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)