java併發體驗。。。

2021-08-30 14:08:23 字數 1286 閱讀 8840

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併發學習

同步和非同步通常用來形容一次方法呼叫。同步方法呼叫一開始,呼叫者必須等待被呼叫的方法結束後,呼叫者後面的 才能執行。而非同步呼叫,指的是,呼叫者不用管被呼叫方法是否完成,都會繼續執行後面的 當被呼叫的方法完成後會通知呼叫者。比如,在超時購物,如果一件物品沒了,你得等倉庫人員跟你調貨,直到倉庫人員跟你...