多線程初探(七)

package com.liujunhua.it02;

/**
 * 線程間的通信:
 * 所謂線程間通信就是多個線程操作同一個資源,但操作的動作不同。
 * 
 * 這裏輸入和輸出線程會搶奪cpu執行權,如果輸入線程搶到了cpu的執行權就會一直執行執行賦值操作,顯然當前的賦值操作會覆蓋
 * 上一次的賦值操作。如果輸出線程搶到了cpu的執行權時,就會一直進行輸出操作,顯然,在其有執行權的期間它會一直對當前的
 * 值進行不停的輸出。
 * 
 */
public class Demo03 {

	public static void main(String[] args) {
        //創建了一個資源對象
		Res r = new Res();

		/*
		 * 將Runnable子類的兩個對象實例化
		 * 通過參數傳遞將r傳遞到in和out對象中
		 * in和out是對同一個r對象進行操作
		 */
		Input in = new Input(r);
		Output out = new Output(r);

		//將Runnable對象與線程聯繫起來
		Thread t1 = new Thread(in);
		Thread t2 = new Thread(out);

		t1.start();
		t2.start();
	}
}

class Res {
	String name;
	String sex;
}

class Input implements Runnable {

	private Res r;

	Input(Res r) {
		this.r = r;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		int mark = 0;

		while (true) {

			synchronized (r) {
				if (mark == 0) {
					r.name = "mike";
					r.sex = "man";
				} else {
					r.name = "麗麗";
					r.sex = "女女";
				}
				mark = (mark + 1) % 2;
			}

		}
	}

}

class Output implements Runnable {

	private Res r;

	Output(Res r) {
		this.r = r;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while (true) {
			
			synchronized (r) {
				
				System.out.println(r.name + "........" + r.sex);
			}
			
		}
	}

}

發佈了71 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章