天天看點

10. 11. 1. 線程同步 Test Synchronized method

public class TestSynchronized {
	int taskID;//任務ID
	
	public static void print(String msg){//定義一個列印方法
		System.out.println(Thread.currentThread().getName() + ":" + msg);
	}
	
	/**
	 * val:十萬牛頓每平米(英國壓力機關)
	 * VAL是自1980年代采用了Robert Gabillard教授發明的膠輪路軌系統技術,
	 * 由法國馬特拉公司(Matra)設計的一套專利軌道運輸系統。
	 * 當然,這與本程式無關!
	 */
	public synchronized void performATask(int val){//定義一個同步task任務
		taskID = val;
		print("之前:" + taskID);
		
		try{
			Thread.sleep(4000);//睡4秒,時間夠長了...
		}catch(InterruptedException e){
			//這裡沒内容
		}
		print("之後:" + taskID);
	}

	public static void main(String[] args) throws Exception{//把所有異常都抛出,狠....
		final TestSynchronized tus = new TestSynchronized();
		Runnable runA = new Runnable(){
			public void run(){
				tus.performATask(1);//注意:開始調它的方法了,傳ID為1
			}
		};
		
		Thread ta = new Thread(runA,"線程A");//我再調用你,ID為1的那個啊
		ta.start();
		
		Thread.sleep(2000);//又一個睡了
		
		Runnable runB = new Runnable(){
			public void run(){
				tus.performATask(2);//傳給你ID  2
			}
		};
		
		Thread tb = new Thread(runB,"線程B");
		tb.start();
	}
}
/**
 * 線程A:之前:1
線程A:之後:1
線程B:之前:2
線程B:之後:2
 */