Java多線程與併發應用-(6)-多個線程之間共享對象和數據的方式

此內容來自張孝祥老師的java多線程與併發庫高級應用

如果多個線程執行的代碼相同,可以使用同一個Runnable對象,這個Runnable對象中有那個共享數據。

如果多個線程執行的代碼不同,這時候需要用不同的Runnable對象。將共享對象封裝在另一個對象中,然後將這個對象逐一傳給各個Runnable對象。每個線程對共享數據的操作方法也分配到那個對象身上去完成,這樣容易實現針對該對象進行各個操作的互斥和通信。

總之,要同步互斥的幾段代碼最好分別放在幾個獨立的方法中,這些方法再放在同一個類型,將這個類的實例交給Runnable處理,這樣容易實現他們之間的同步互斥和通信

實現代碼:

public class Demo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MyAddRun addRun=new MyAddRun();
		MySubRun subRun=new MySubRun();
		new Thread(addRun,"add--1111-----        ").start();
		new Thread(addRun,"add--2222-----       ").start();
		new Thread(subRun,"sub--3333-----            ").start();
		new Thread(subRun,"sub--4444-----                       ").start();
	}
	

}

class Calculate
{
	private static int i;
	public static synchronized void addOne()
	{
		i++;
		System.out.println(Thread.currentThread().getName()+ i);
	}
	public static synchronized void subOne()
	{
		i--;
		System.out.println(Thread.currentThread().getName()+ i);
	}
	
}

class MyAddRun implements Runnable
{
	@Override
	public void run() {
		for(int j=0;j<100;j++)
		{
			Calculate.addOne();
		}
		
	}
	
}

class MySubRun implements Runnable
{
	@Override
	public void run() {
		for(int j=0;j<100;j++)
		{
			Calculate.subOne();
		}
	}
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章