public class testdo
public void seta(string a)
public string getb()
public void setb(string b)
public int getid()
public void setid(int id)
}
public class servicea
public static servicea geta()
public void test(int i) catch (interruptedexception e)
testdo.setid(i);
testdo.seta("a" + i);
testdo.setb("b" + i);
system.out.println(testdo.getid()+"--"+testdo.geta()+"--"+testdo.getb());
}}
public class threada implements runnable
private int i;
public void run()
}
public class main
for (int i = 0; i < a.length; i++)
}}
1--a2--b2
2--a2--b2
4--a4--b4
4--a4--b4
4--a4--b4
1--a4--b4
9--a9--b9
6--a6--b6
8--a8--b8
7--a7--b7
可以看到這裡已經出現問題了。我們的預期是將0-9的每一樣都列印出來。
相反的,我們將servicea中的全域性do改為下面的test方法中的
testdo testdo = new testdo();
再執行結果為:
6--a6--b6
9--a9--b9
8--a8--b8
1--a1--b1
7--a7--b7
2--a2--b2
0--a0--b0
4--a4--b4
3--a3--b3
5--a5--b5
可以看到這次的結果是想要的。。。
java 併發 高併發概述
為什麼需要並行 有關並行的重要概念 有關並行效能的2個重要定律 多執行緒基礎 執行緒的基本操作 守護執行緒 優先順序 中斷處理 基本的執行緒同步操作 各種同步控制工具的使用 併發容器及典型原始碼分析 同步工具 併發容器使用小案例 第5課 jdk並發包 執行緒池的基本使用 擴充套件和增強執行緒池 執行...
JAVA併發程式設計
通過常量字串 string 來呼叫 wait 或 notify 方法所導致的問題是,jvm 編譯器會在內部自動將內容相同的 string 轉變為相同的物件。這意味著,即便你建立了兩個不同的 mywaitnotify 例項,他們內部的 mymonitorobject 變數也會指向相同的 string ...
Java併發學習
同步和非同步通常用來形容一次方法呼叫。同步方法呼叫一開始,呼叫者必須等待被呼叫的方法結束後,呼叫者後面的 才能執行。而非同步呼叫,指的是,呼叫者不用管被呼叫方法是否完成,都會繼續執行後面的 當被呼叫的方法完成後會通知呼叫者。比如,在超時購物,如果一件物品沒了,你得等倉庫人員跟你調貨,直到倉庫人員跟你...