码迷,mamicode.com
首页 > 编程语言 > 详细

线程之间的同步通信

时间:2015-04-26 01:20:27      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:多线程   通信   面向对象   thread   java   

我们都知道在java中线程的代码形式可以写为如下

new Thread(
				new Runnable() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
						
					}
				}
				).start();
在多线程启动之下,线程之间的运行将是随机进行切换的,通常有的时候,我们在业务需求上可能需要线程之间有序的进行切换执行,确保业务的准切性,比如银行的取票机,还有火车的售票等,在此等业务的情况下,我们要想控制线程之间的通信,需要通过同步锁来实现

比如我希望线程a执行5此后,线程b执行10次,或者反过来,如此50次。

下面我们来看代码

class Business{
	 
	 private boolean bShouldSub = true;
	 
	 public synchronized void sub(int i){
		 
		 while (!bShouldSub) {
			 try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		 
		 for(int  j=0;j<=i;j++){
				System.out.println("sub thread------------------------------------------------------------"+j);
			}
		 
		 bShouldSub = false;
		 this.notify();
	 }
	 
	 public synchronized void main(int i){
		 	
		 while (bShouldSub) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
			for (int j = 0; j <= i; j++) {
				System.out.println("main thread sequence of   " + j
						+ "   i=" + i);
			}
			
			bShouldSub = true;
			this.notify();
	 }
	 
	 
 }
把相称要执行的业务单独抽取成一个类,确保锁的唯一性。

private boolean bShouldSub = true;是为了 线程之间进行通信。

下面我们来看线程的执行代码

	
		final Business business = new Business();
		
			new Thread(
					new Runnable() {
						
						@Override
						public void run() {	
							for(int i=0;i<=50;i++){
									business.sub(5);
							}
							
											
						}
					}
					).start();
			
		for (int i = 0; i <= 50; i++) {
			
				business.main(10);
		}
			
	}

至此想必对初学者来说对线程的通信机制的了解会更进一步





线程之间的同步通信

标签:多线程   通信   面向对象   thread   java   

原文地址:http://blog.csdn.net/u013704998/article/details/45279019

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!