子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。
编程技术  /  houtizong 发布于 3年前   70
/** * 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 * @author lijinnan * @date:2013-11-5 下午3:07:10 */public class ThreadComunication { private static final int ROUND_COUNT = 50; public static void main(String[] args) { //主线程和子线程“共享”一个Busines实例 final Business business = new Business(); /* //主线程 for (int i = 0; i < ROUND_COUNT; i++) { business.main(i); } */ //子线程-注意要先启动子线程,否则子线程不会启动,主线程在roundIndex=0执行完毕后就陷入无限等待 new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < ROUND_COUNT; i++) { business.sub(i); } } }).start(); //主线程 for (int i = 0; i < ROUND_COUNT; i++) { business.main(i); } }}class Business { private static final int SUB_COUNT = 10; private static final int MAIN_COUNT = 100; private boolean doSub; public synchronized void sub(int roundIndex) { while (!doSub) { try { wait(); } catch (InterruptedException e) { //ignore } } for (int i = 0; i < SUB_COUNT; i++) { System.out.println("sub " + i + " of " + roundIndex); } doSub = false; notifyAll(); } public synchronized void main(int roundIndex) { while (doSub) { try { wait(); } catch (InterruptedException e) { //ignore } } for (int i = 0; i < MAIN_COUNT; i++) { System.out.println("main " + i + " of " + roundIndex); } doSub = true; notifyAll(); } }
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接