//AA打印5次,BB打印10次,CC打印15次 //接着同上 //来10轮 根据题目需要精准控制线程,使用Lock来实现 import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; class ShareThread{ private int num =1;//A:1,B:2,C:3 private Lock lock = new ReentrantLock(); private Condition condition1 = lock.newCondition(); private Condition condition2 = lock.newCondition(); private Condition condition3 = lock.newCondition(); public void printThread1(){ lock.lock(); try{ //判断 while(num != 1){ condition1.await(); } //干活 for(int i = 0;i<=5;i++){ System.out.println(Thread.currentThread().getName()+"\t"+i); } //通知 num = 2; condition2.signal(); }catch (Exception e){ e.printStackTrace(); }finally { lock.unlock(); } } public void printThread2(){ lock.lock(); try{ //判断 while(num != 2){ condition2.await(); } //干活 for(int i = 0;i<=10;i++){ System.out.println(Thread.currentThread().getName()+"\t"+i); } //通知 num = 3; condition3.signal(); }catch (Exception e){ e.printStackTrace(); }finally { lock.unlock(); } } public void printThread3(){ lock.lock(); try{ //判断 while(num != 3){ condition3.await(); } //干活 for(int i = 0;i<=15;i++){ System.out.println(Thread.currentThread().getName()+"\t"+i); } //通知 num = 1; condition1.signal(); }catch (Exception e){ e.printStackTrace(); }finally { lock.unlock(); } } } public class ThreadPratice { public static void main(String[] args) { ShareThread shareThread = new ShareThread(); new Thread(() ->{ for(int i=1;i<=10;i++){ shareThread.printThread1(); } }).start(); new Thread(() ->{ for(int i=1;i<=10;i++){ shareThread.printThread2(); } }).start(); new Thread(() ->{ for(int i=1;i<=10;i++){ shareThread.printThread3(); } }).start(); } }
java 多线程控制练习题
猜你喜欢
转载自blog.csdn.net/weixin_39475445/article/details/104336558
周排行