java基礎:執行緒同步
一:先看程式
public class Timer1 {
private static int num = 0;
public void add(String name) {
num++;
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + ",你是第" + num + "個使用Timer的執行緒");
}
}
public class TestSync1 implements Runnable{
Timer1 timer = new Timer1();
@Override
public void run() {
timer.add(Thread.currentThread().getName());
}
public static void main(String[] args) {
TestSync1 test = new TestSync1();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.start();
t2.start();
}
}
看輸出結果:
Thread-0,你是第2個使用Timer的執行緒
Thread-1,你是第2個使用Timer的執行緒
結果明顯有問題:
這是因為兩個執行緒訪問的是同一個Timer物件,其中一個執行緒呼叫Timer的add方法時,num++,這個時候,另外一個執行緒也有可能呼叫add方法,num又++,然後執行緒1輸出,執行緒2輸出,輸出的是同一個num = 2
二:解決辦法
add方法上加上synchronized關鍵字:public synchronized void add(String name){
或者在timer內部,執行程式碼塊
synchronized(this){
num++;
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + ",你是第" + num + "個使用Timer的執行緒");
}
這兩種方法,道理是一個的,都是實現鎖定Timer物件。
相關文章
- Java 執行緒基礎Java執行緒
- Java執行緒池一:執行緒基礎Java執行緒
- java - 多執行緒基礎Java執行緒
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- Java 多執行緒基礎(八)執行緒讓步Java執行緒
- [Java基礎]虛擬執行緒Java執行緒
- Java多執行緒-基礎篇Java執行緒
- Java 基礎(十四)執行緒——下Java執行緒
- Java基礎之執行緒安全Java執行緒
- Java 多執行緒基礎 - CyclicBarrierJava執行緒
- java 多執行緒 –同步Java執行緒
- java 多執行緒 --同步Java執行緒
- java基礎 關於執行緒安全Java執行緒
- JAVA_基礎多執行緒(一)Java執行緒
- Java基礎之執行緒那些事Java執行緒
- Java-基礎-執行緒入門Java執行緒
- Java 多執行緒基礎(六)執行緒等待與喚醒Java執行緒
- 執行緒基礎執行緒
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- Java中的執行緒同步Java執行緒
- Java 執行緒同步原理探析Java執行緒
- Java 多執行緒基礎(十一)執行緒優先順序和守護執行緒Java執行緒
- Java多執行緒之執行緒同步【synchronized、Lock、volatitle】Java執行緒synchronized
- 【JAVA】【面試】【基礎篇】- 執行緒、鎖Java面試執行緒
- Java併發基礎(2)------執行緒池Java執行緒
- Java基礎之多執行緒程式設計Java執行緒程式設計
- java基礎之執行緒 認識volatileJava執行緒
- java基礎-多執行緒初步瞭解Java執行緒
- JAVA多執行緒和併發基礎Java執行緒
- 程式執行緒篇——程式執行緒基礎執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- 最全java多執行緒學習總結1--執行緒基礎Java執行緒
- 多執行緒基礎執行緒
- Java多執行緒—執行緒同步(單訊號量互斥)Java執行緒
- JAVA多執行緒詳解(3)執行緒同步和鎖Java執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- java synchronize - 執行緒同步機制Java執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- python基礎執行緒-管理併發執行緒Python執行緒