线程的同步通信技术

模拟情景:有一个工人,他有两个方法,一个是工作,另一个是休息;工作的时候该正常工作不该做休息时的事,休息的时候就该好好的休息无需工作。
以下是实现代码:

public class ThreadCommunication {
		/**
		 * @param args
		 */
		public static void main(String[] args) {
			final Worker worker = new Worker();
			new Thread(
					new Runnable() {
						
						@Override
						public void run() {
							for(int j=1;j<=10;j++){
							worker.work(j);//在子线程工人工作
							}
						}
					}
			).start();
			for(int i=1;i<=10;i++){
			worker.rest(i);//在主线程工人休息
			}
		}

	}
	  class Worker {
		  private boolean iswork = true;
      //这段时间在工作
		  public synchronized void work(int i){
			  while(!iswork){
				  try {
					this.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			  }
			  for(int j=1;j<=100;j++){
					System.out.println("I should work now!");
			  }
				iswork = false;
			  this.notify();
		  }
     //这段时间在休息	  
		  public synchronized void rest(int i){
			  	while(iswork){
			  		try {
						this.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
			  	}
			  	for(int j=1;j<=10;j++){
					System.out.println("I can hava a good rest now! " );
			  	}
				iswork = true;
				this.notify();
		  }
	  }


 

在主线程中首先开通一个子线程,子线程用来实现对worker的work()的调用,运行完后就进入主线程来运行rest(),synchronized用来对代码快的同步,当操作子线程是通过调用wait()方法来提醒主线程等待,子线程运行完后再调用notify()方法提醒主线程开始运行。同样的道理,只有主线程完成自己的任务才交给子线程运行,这样一直反复循环下去,直到所有程序运行结束。这样就实现了线程的同步通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值