Java中線程用法總結(jié)
本文實(shí)例總結(jié)了Java中線程用法。分享給大家供大家參考。具體分析如下:
1.線程是基本調(diào)度單元。共享進(jìn)程的資源,如內(nèi)存和文件句柄。但有自己的pc(程序計(jì)數(shù)器),stack(線程棧)及本地變量
2.線程的優(yōu)勢(shì):
a) 充分利用多處理器
b) 可以簡(jiǎn)化模型。特定任務(wù)給特定線程。如servlets及rmi等框架。
c) 對(duì)異步事件的簡(jiǎn)單處理。如socket,nio使用更復(fù)雜。而現(xiàn)在的操作系統(tǒng)支持更大數(shù)量的線程。
d) 界面的更佳響應(yīng)
3.內(nèi)部鎖:synchronized塊?;コ???芍厝耄╮eentrancy),這樣的設(shè)計(jì)可以避免死鎖
4.內(nèi)存可見性:因?yàn)榫幾g器的優(yōu)化,線程并不和你看到的一樣。
public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
public void run() {
while (!ready)
Thread.yield();
System.out.println(number);
}
}
public static void main(String[] args) {
new ReaderThread().start();
number = 42;
ready=true;
}
}
可能打印0,或者一直循環(huán)。因?yàn)橹嘏判蛄?/p>
5.volatile:可以解決內(nèi)存可見性,對(duì)syncronized性能更佳,但僅此而已,如不能保證a++的原子性
6.溢出(escape):不要在構(gòu)造函數(shù)中將this指針溢出。不要將內(nèi)部變量溢出,如:
class Test {
private String[] list = new String[] {};
public String[] getList() {return list;}
}
7.線程封閉:把對(duì)象封閉在一個(gè)線程中,無論對(duì)象是否是線程安全的,都能保證線程安全
a) statck限制。即只有本地變量能訪問該對(duì)象。
b)ThreadLocal。
8.不可變對(duì)象。一定是線程安全的。不可變對(duì)象必須滿足:
a) 狀態(tài)不能在創(chuàng)建后修改。
b) 所以的域都是final
c) 正確創(chuàng)建對(duì)象,沒有this指針溢出
9.安全發(fā)布
a) 通過static初始化對(duì)象
b) 使用volatile或AtomicReference
c) 將引用存儲(chǔ)于正確創(chuàng)建的對(duì)象的final域
d) 使用鎖
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
相關(guān)文章
IDEA集成DeepSeek通過離線安裝解決無法安裝Proxy?AI插件問題(最新推薦)
許多開發(fā)者嘗試通過安裝Proxy?AI等插件將AI能力引入IDEA,但在實(shí)際使用中常遭遇插件安裝失敗、網(wǎng)絡(luò)連接不穩(wěn)定或兼容性沖突等問題,本文給大家介紹IDEA集成DeepSeek通過離線安裝解決無法安裝Proxy?AI插件問題,感興趣的朋友一起看看吧2019-12-12
springboot創(chuàng)建多module項(xiàng)目的實(shí)例
這篇文章主要介紹了springboot創(chuàng)建多module項(xiàng)目的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
聊聊SpringCloud中的Ribbon進(jìn)行服務(wù)調(diào)用的問題
SpringCloud-Ribbon是基于Netflix?Ribbon實(shí)現(xiàn)的一套客戶端負(fù)載均衡的工具。本文給大家介紹SpringCloud中的Ribbon進(jìn)行服務(wù)調(diào)用的問題,感興趣的朋友跟隨小編一起看看吧2022-01-01

