java的多线程访问共享变量_java多线程通信之共享变量
(1)當(dāng)訪問共同的代碼的時候:可以使用同一個Runnable對象,這個Runnable對象中有這個共享數(shù)據(jù),比如賣票系統(tǒng)就可以這么做。或者這個共享數(shù)據(jù)封裝在一個對象當(dāng)中,然后對這個對象加鎖,也可以實現(xiàn)數(shù)據(jù)安全訪問。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();
}
}
/*?實現(xiàn)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)當(dāng)各個線程訪問的代碼不同時:這時候要使用不同的Runnable對象,
將Runnable對象作為某一個類中的內(nèi)部類,共享數(shù)據(jù)作為這個外部類的成員變量,每個線程對共享數(shù)據(jù)的訪問也交給外部類的方法,比便對共享數(shù)據(jù)的互斥和通信。Runnable對象調(diào)用外部類的操作這個共享數(shù)據(jù)的方法。
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();
}
}
/**
*?通過內(nèi)部類實現(xiàn)線程的共享變量
*
*/
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
總結(jié)
以上是生活随笔為你收集整理的java的多线程访问共享变量_java多线程通信之共享变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到别人怀孕大肚子是什么意思
- 下一篇: java 如何将word 转换为ftl_