多线程04_张孝祥-传统线程同步通信技术

来源:互联网 发布:注册免费域名 编辑:程序博客网 时间:2024/05/16 00:38

面试题

要求写出下面的程序:

       子线程循环10次,接着换主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,请写出程序?


代码:

package org.yla;/** * 传统线程的同步通信 * @author huo_chai_gun 2014年12月16日下午10:32:54 *子线程循环10次,接着换主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,请写出程序? */public class TraditionalThreadCommunication {public static void main(String[] args) {final Business business = new Business();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 1; i <= 50; i++) {business.sub(i);}}}).start();for (int i = 1; i <= 50; i++) {business.main(i);}}}class Business{//标记 true表示sub 运行 false表示main运行private boolean isShouleSub =true;public synchronized void sub(int i){while(!isShouleSub){//说明不该sub运行try {this.wait();//等待} catch (InterruptedException e) {e.printStackTrace();}}for (int j = 1; j <= 10; j++) {System.out.println("sub thread sequece of " + j+ " ,loop of " + i);}isShouleSub=false;this.notify();//唤醒main运行}public synchronized void main(int i){while(isShouleSub){//说明不该main运行try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}for (int j = 1; j <= 100; j++) {System.out.println("main thread sequece of " + j+ " ,loop of " + i);}isShouleSub=true;this.notify();}}


0 0
原创粉丝点击