執行緒問題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)-執行緒同步條件變數執行緒變數
- 多執行緒中的使用共享變數的問題執行緒變數
- objective-c 多執行緒注意的問題Object執行緒
- java多執行緒例項Java執行緒
- Java多執行緒/併發12、多執行緒訪問static變數Java執行緒變數
- 執行緒問題執行緒
- Python執行緒專題8:使用鎖的注意事項Python執行緒
- Java多執行緒2:Thread中的例項方法Java執行緒thread
- 【iOS – OC】OC基礎-單例的實現 & 提醒自己注意多執行緒問題iOS單例執行緒
- Python執行緒專題7:條件變數Python執行緒變數
- java多執行緒執行問題Java執行緒
- 多執行緒問題執行緒
- Qt中的多執行緒與執行緒池淺析+例項QT執行緒
- Java執行緒(篇外篇):執行緒本地變數ThreadLocalJava執行緒變數thread
- j2me多執行緒遇到問題執行緒
- ruby中的類例項變數和例項的例項變數變數
- 多執行緒-生產者消費者問題程式碼2並解決執行緒安全問題執行緒
- linux執行緒池簡單例項Linux執行緒單例
- Block內部訪問例項變數會出現的問題BloC變數
- JAVA多執行緒使用場景和注意事項Java執行緒
- 多執行緒-NSOperation中使用ASIHttpRequest注意事項執行緒HTTP
- python 類變數 在多執行緒下的共享與釋放問題Python變數執行緒
- SimpleDateFormat 執行緒安全問題ORM執行緒
- java執行緒安全問題Java執行緒
- Linux每程式執行緒數問題處理Linux執行緒
- 多執行緒06:條件變數執行緒變數
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 單例模式中可能存在的一些問題(執行緒安全問題)單例模式執行緒
- Python程式和執行緒例項詳解Python執行緒
- 執行緒控制時間的隨筆(例項)執行緒
- c++11多執行緒入門例項C++執行緒
- C#多執行緒程式設計例項C#執行緒程式設計
- 通用執行緒:Awk 例項,第 1 部分(轉)執行緒
- C++ 靜態變數單例模式的誤會(執行緒安全)C++變數單例模式執行緒
- 限制程式執行例項數 (轉)
- 【C++注意事項】2 變數宣告和定義C++變數
- c#基礎,單執行緒,跨執行緒訪問和執行緒帶引數C#執行緒