(1)當訪問共同的代碼的時候:可以使用同一個Runnable對象,這個Runnable對象中有這個共享數據,比如賣票系統就可以這么做。或者這個共享數據封裝在一個對象當中,然后對這個對象加鎖,也可以實現數據安全訪問。public?class?Interfacaesharethread?{
public?static?void?main(String[]?args)?{
Mythread1?mythread?=?new?Mythread1();
new?Thread(mythread).start();
new?Thread(mythread).start();
new?Thread(mythread).start();
new?Thread(mythread).start();
}
}
/*?實現Runnable接口?*/
class?Mythread1?implements?Runnable?{
int?index?=?0;
public?synchronized?void?run()?{
while?(true)
System.out.println(Thread.currentThread().getName()?+?"is?running?and?the?index?is?"?+?index++);
}
}
(2)當各個線程訪問的代碼不同時:這時候要使用不同的Runnable對象,
將Runnable對象作為某一個類中的內部類,共享數據作為這個外部類的成員變量,每個線程對共享數據的訪問也交給外部類的方法,比便對共享數據的互斥和通信。Runnable對象調用外部類的操作這個共享數據的方法。
public?class?Innersharethread?{
public?static?void?main(String[]?args)?{
Mythread?mythread?=?new?Mythread();
mythread.getThread().start();
mythread.getThread().start();
mythread.getThread().start();
mythread.getThread().start();
}
}
/**
*?通過內部類實現線程的共享變量
*
*/
class?Mythread?{
int?index?=?0;
private?class?InnerThread?extends?Thread?{
public?synchronized?void?run()?{
while?(true)?{
System.out.println(Thread.currentThread().getName()
+?"is?running?and?index?is?"?+?index++);
}
}
}
public?Thread?getThread()?{
return?new?InnerThread();
}
}
參考文章:
原文:http://tianxingzhe.blog.51cto.com/3390077/1693465