`
wang吖
  • 浏览: 234981 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

传统线程通信-线程执行过程中进行条件切换-学习笔记10

阅读更多

      传统线程通讯执行过程中的通信是通过Object类的wait()、notify()、notifyAll()方法来实现的,下面我们通过一个案例来学习一下这些方法。

 

案例:

       假设现在存在两个线程,主线程main与一个子线程,首先子线程执行5次,然后切换到主线程执行10次,再切换至子线程执行5次,主线程执行10次,如此各循环3次。

 

程序代码如下:

/**
 * 
 * @author 吖大哥
 * @date May 24, 2014 5:08:12 PM
 */
public class ConditionTest {

	public static void main(String[] args) {

		final Business2 b = new Business2();

		// 启动线程1 执行20次
		new Thread(new Runnable() {
			public void run() {
				for (int i = 0; i < 3; i++) {
					b.sub1(i);
				}
			}
		}).start();

		for (int i = 0; i < 3; i++) {
			b.main2(i);
		}
	}

}

class Business2 {

	private boolean action = true;

	public synchronized void sub1(int once) {
		while (!action) {//
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		for (int i = 0; i < 5; i++) {
			System.out.println("Sub1 " + once + " runing *********" + i);
		}
		action = false;
		this.notify();
	}

	public synchronized void main2(int once) {
		while (action) {//
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		for (int i = 0; i < 10; i++) {
			System.out.println("Main2 " + once + " runing *********" + i);
		}
		action = true;
		this.notify();
	}
}

 

输出结果:

Sub1 0 runing *********0
Sub1 0 runing *********1
Sub1 0 runing *********2
Sub1 0 runing *********3
Sub1 0 runing *********4
Main2 0 runing *********0
Main2 0 runing *********1
Main2 0 runing *********2
Main2 0 runing *********3
Main2 0 runing *********4
Main2 0 runing *********5
Main2 0 runing *********6
Main2 0 runing *********7
Main2 0 runing *********8
Main2 0 runing *********9
Sub1 1 runing *********0
Sub1 1 runing *********1
Sub1 1 runing *********2
Sub1 1 runing *********3
Sub1 1 runing *********4
Main2 1 runing *********0
Main2 1 runing *********1
Main2 1 runing *********2
Main2 1 runing *********3
Main2 1 runing *********4
Main2 1 runing *********5
Main2 1 runing *********6
Main2 1 runing *********7
Main2 1 runing *********8
Main2 1 runing *********9
Sub1 2 runing *********0
Sub1 2 runing *********1
Sub1 2 runing *********2
Sub1 2 runing *********3
Sub1 2 runing *********4
Main2 2 runing *********0
Main2 2 runing *********1
Main2 2 runing *********2
Main2 2 runing *********3
Main2 2 runing *********4
Main2 2 runing *********5
Main2 2 runing *********6
Main2 2 runing *********7
Main2 2 runing *********8
Main2 2 runing *********9

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics