传统线程同步通信技术

感谢张孝祥老师,下面是我看了他的视频之后自己模仿他写出来的代码,以前很多面试题都有这道题,也看了网上的一些答案,那些答案真的很混乱很难看懂,张老师的设计思想把它简单化了,一份优雅的代码让我们很轻松地就理解了,重要的是领教了他的这种设计思想。

 

 

package com.thread.test;


/**

 * @fileName ConditionCommunication.java

 * @description 传统线程同步通信技术,子线程循环10次,接着主线程循环100次,又回到子线程循环10次,接着再回  * 到主线程又循环100次,如此循环50次

 * 

 * @date  2012-2-25

 * @time 16:55

 * @author wst

 *

 */

public class ConditionCommunication {


public static void main(String[] args) {

final Business b=new Business();

new Thread(new Runnable(){

@Override

public void run() {

for(int i=1;i<=50;i++){

b.sub(i);

}

}

}).start();

//因为mian方法本身就占用一个线程,所以主线程不需要再newThread

for(int i=1;i<=50;i++){

b.main(i);

}

}


static class Business{

private boolean b=true;

//子线程循环10次,休息,唤醒下一个线程

public synchronized void sub(int i){

while(!b){

try {

this.wait();//是当前线程休息

} catch (InterruptedException e) {

e.printStackTrace();

}

}

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

System.out.println("j:"+j+"  i:"+i);

}

b=false;

this.notify();//唤醒下一个线程

}

//主线程循环100次,休息,唤醒下一个线程

public synchronized void main(int i){

while(b){

try {

this.wait();//是当前线程休息

} catch (InterruptedException e) {

e.printStackTrace();

}

}

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

System.out.println("j:"+j+"  i:"+i);

}

b=true;

this.notify();//唤醒下一个线程

}

}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值