您的位置:首页 > 其它

一道多线程的笔试题

2014-05-28 20:28 225 查看
子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。

package cn.cblue.heima2;

/**

* @Description: 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次

* @author huangzjb cblue2013@126.com

* @Company Digital China

* @date 2014-5-28 下午07:47:03

* @version 1.0

*/

public class TranditionalThreadCommunication {

public static void main(String[] args) {

final Business business = new Business();

new Thread(new Runnable() {

public 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 {

Boolean bShouldSub = true;//控制sub()和main()谁该执行

public synchronized void sub(int i) {

while (!bShouldSub) {

try {

this.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

for (int j = 1; j <= 10; j++) {

System.out.println("sub thread sequence of " + j + " , loop of "

+ i);

}

bShouldSub = false;

this.notify();

}

public synchronized void main(int i) {

while (bShouldSub) {

try {

this.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

for (int j = 1; j <= 100; j++) {

System.out.println("main thread sequence of " + j + " , loop of "

+ i);

}

bShouldSub = true;

this.notify();

}

}

经验:要用到共同数据(包括同步锁)或共同算法的若干个方法应该归在同一个类身上,这种设计正好体现了高类聚和程序的健壮性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: