理解高併發 3 多執行緒開發常見問題示例

2021-08-04 05:45:50 字數 773 閱讀 9731

多執行緒開發過程中,經常會出現的一些問題:非執行緒安全、死鎖、飢餓鎖。 示例**如下:

package com.zuche.thread.demo1;

public class testclient

});thread t1 = new thread(new runnable()

});t.start();

t1.start();

system.out.println("最後的金額:" + account.getbalance());}}

理論上最後的金額應該為1000

package com.zuche.thread.demo3;

public class workthread extends thread

public void run()

if(ruletype.equals("boss"))

}private void employeesay()}}

private void bosssay()}}

}執行後,程式不能正常退出,卡死在那兒。

死鎖概念: 2個執行緒相互僵持不下,導致無法訪問共享資源,最終無法釋放鎖資源。

package com.zuche.thread.demo2;

public class toilet catch (interruptedexception e) }}

private void clean()

}執行後,另乙個執行緒無法訪問共享資源

飢餓鎖概念: 乙個執行緒占用著鎖不放導致其它執行緒無法訪問共享資源

Java 多執行緒常見問題

上下文切換 多執行緒並不一定是要在多核處理器才支援的,就算是單核也是可以支援多執行緒的。cpu 通過給每個執行緒分配一定的時間片,由於時間非常短通常是幾十毫秒,所以 cpu 可以不停的切換執行緒執行任務從而達到了多執行緒的效果。上下文切換是非常耗效率的。通常有以下解決方案 採用無鎖程式設計,比如將資...

Java 多執行緒常見問題

多執行緒並不一定是要在多核處理器才支援的,就算是單核也是可以支援多執行緒的。cpu 通過給每個執行緒分配一定的時間片,由於時間非常短通常是幾十毫秒,所以 cpu 可以不停的切換執行緒執行任務從而達到了多執行緒的效果。上下文切換是非常耗效率的。通常有以下解決方案 死鎖的場景一般是 執行緒 a 和執行緒...

Java 多執行緒常見問題

多執行緒並不一定是要在多核處理器才支援的,就算是單核也是可以支援多執行緒的。cpu 通過給每個執行緒分配一定的時間片,由於時間非常短通常是幾十毫秒,所以 cpu 可以不停的切換執行緒執行任務從而達到了多執行緒的效果。上下文切換是非常耗效率的。通常有以下解決方案 死鎖的場景一般是 執行緒 a 和執行緒...