執行緒問題2(注意例項變數)
這個例子就是為了說明instance和static變數被多個執行緒訪問的結果:
1.static 的話,肯定要注意多執行緒的問題
2.instance的話,就看前面caller的程式碼怎麼寫了。
在多個執行緒的情況下,instance 變數很可能被多個執行緒修改過。
3.sychronized僅僅是為了保證原子操作性,對變數被多執行緒訪問過是無法控制的
package com.tools.thread.eighth;
public class MultipleThreadTest {
public static void main(String[] args) {
final Call1 call1 = new Call1();
for (int i = 0; i < 100; i++) {
Thread Work = new Thread() {
public void run() {
//下面的註釋可以去掉,察看不同的執行結果
// call1.synchronous();
call1.asynchronous();
// call1.call();
}
};
Work.start();
}
try {
Thread.currentThread().sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.tools.thread.eighth;
public class Call1 {
private Call2 call2 = new Call2();
synchronized void synchronous(){
call2.print();
}
void asynchronous(){
call2.print();
}
void call(){
Call2 call3 = new Call2();
call3.print();
}
}
package com.tools.thread.eighth;
public class Call2 {
private String sharedInstanceResoure = "instanceResource" ;
private static String sharedStaticResouce = "staticResource" ;
public void print(){
setResource(getResource()+ " "+ Thread.currentThread().getName());
System.out.println(Thread.currentThread().getName()+ ":"+getResource());
setStaticResource(getStaticResource()+ " "+ Thread.currentThread().getName());
System.out.println(Thread.currentThread().getName()+ ":"+getStaticResource());
}
public String getResource() {
return sharedInstanceResoure;
}
public void setResource(String resource) {
this.sharedInstanceResoure = resource;
}
public String getStaticResource() {
return sharedStaticResouce;
}
public void setStaticResource(String resource) {
this.sharedStaticResouce = resource;
}
}
1.static 的話,肯定要注意多執行緒的問題
2.instance的話,就看前面caller的程式碼怎麼寫了。
在多個執行緒的情況下,instance 變數很可能被多個執行緒修改過。
3.sychronized僅僅是為了保證原子操作性,對變數被多執行緒訪問過是無法控制的
package com.tools.thread.eighth;
public class MultipleThreadTest {
public static void main(String[] args) {
final Call1 call1 = new Call1();
for (int i = 0; i < 100; i++) {
Thread Work = new Thread() {
public void run() {
//下面的註釋可以去掉,察看不同的執行結果
// call1.synchronous();
call1.asynchronous();
// call1.call();
}
};
Work.start();
}
try {
Thread.currentThread().sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.tools.thread.eighth;
public class Call1 {
private Call2 call2 = new Call2();
synchronized void synchronous(){
call2.print();
}
void asynchronous(){
call2.print();
}
void call(){
Call2 call3 = new Call2();
call3.print();
}
}
package com.tools.thread.eighth;
public class Call2 {
private String sharedInstanceResoure = "instanceResource" ;
private static String sharedStaticResouce = "staticResource" ;
public void print(){
setResource(getResource()+ " "+ Thread.currentThread().getName());
System.out.println(Thread.currentThread().getName()+ ":"+getResource());
setStaticResource(getStaticResource()+ " "+ Thread.currentThread().getName());
System.out.println(Thread.currentThread().getName()+ ":"+getStaticResource());
}
public String getResource() {
return sharedInstanceResoure;
}
public void setResource(String resource) {
this.sharedInstanceResoure = resource;
}
public String getStaticResource() {
return sharedStaticResouce;
}
public void setStaticResource(String resource) {
this.sharedStaticResouce = resource;
}
}
相關文章
- java執行緒安全問題之靜態變數、例項變數、區域性變數Java執行緒變數
- 多執行緒(2)-執行緒同步條件變數執行緒變數
- 單例模式執行緒安全reorder問題單例模式執行緒
- Python執行緒專題8:使用鎖的注意事項Python執行緒
- 【iOS – OC】OC基礎-單例的實現 & 提醒自己注意多執行緒問題iOS單例執行緒
- Qt中的多執行緒與執行緒池淺析+例項QT執行緒
- Python執行緒專題7:條件變數Python執行緒變數
- Python程式和執行緒例項詳解Python執行緒
- 同時使用執行緒本地變數以及物件快取的問題執行緒變數物件快取
- JAVA多執行緒使用場景和注意事項Java執行緒
- 單例模式中可能存在的一些問題(執行緒安全問題)單例模式執行緒
- 03 執行緒安全問題執行緒
- SimpleDateFormat 執行緒安全問題ORM執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 單例模式(上)—如何優雅地保證執行緒安全問題單例模式執行緒
- 單例模式(上)---如何優雅地保證執行緒安全問題單例模式執行緒
- 多執行緒06:條件變數執行緒變數
- 多執行緒相關問題執行緒
- ArrayList 的執行緒安全問題執行緒
- 多執行緒問題解釋執行緒
- JUC之多執行緒鎖問題執行緒
- 深入JAVA執行緒安全問題Java執行緒
- c#基礎,單執行緒,跨執行緒訪問和執行緒帶引數C#執行緒
- 可變引數例項
- 【多執行緒與高併發3】常用鎖例項執行緒
- J2SE - 關於SimpleDateFonnat的執行緒安全問題執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- 執行緒(2)執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- Python執行緒條件變數Condition解析Python執行緒變數
- python多執行緒-共享全域性變數Python執行緒變數
- parallelStream中的執行緒安全問題Parallel執行緒
- 多執行緒之8鎖問題執行緒
- 05.java多執行緒問題Java執行緒
- 子執行緒 UI 問題捉蟲執行緒UI
- 幾種簡潔建立執行緒的方式以及使用注意事項執行緒
- 執行緒中斷以及執行緒中斷引發的那些問題執行緒
- 子執行緒使用父執行緒RequestScope作用域Bean問題的探究執行緒Bean