Java中線程用法總結(jié)
本文實(shí)例總結(jié)了Java中線程用法。分享給大家供大家參考。具體分析如下:
1.線程是基本調(diào)度單元。共享進(jìn)程的資源,如內(nèi)存和文件句柄。但有自己的pc(程序計(jì)數(shù)器),stack(線程棧)及本地變量
2.線程的優(yōu)勢:
a) 充分利用多處理器
b) 可以簡化模型。特定任務(wù)給特定線程。如servlets及rmi等框架。
c) 對異步事件的簡單處理。如socket,nio使用更復(fù)雜。而現(xiàn)在的操作系統(tǒng)支持更大數(shù)量的線程。
d) 界面的更佳響應(yīng)
3.內(nèi)部鎖:synchronized塊?;コ?。可重入(reentrancy),這樣的設(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)存可見性,對syncronized性能更佳,但僅此而已,如不能保證a++的原子性
6.溢出(escape):不要在構(gòu)造函數(shù)中將this指針溢出。不要將內(nèi)部變量溢出,如:
class Test { private String[] list = new String[] {}; public String[] getList() {return list;} }
7.線程封閉:把對象封閉在一個(gè)線程中,無論對象是否是線程安全的,都能保證線程安全
a) statck限制。即只有本地變量能訪問該對象。
b)ThreadLocal。
8.不可變對象。一定是線程安全的。不可變對象必須滿足:
a) 狀態(tài)不能在創(chuàng)建后修改。
b) 所以的域都是final
c) 正確創(chuàng)建對象,沒有this指針溢出
9.安全發(fā)布
a) 通過static初始化對象
b) 使用volatile或AtomicReference
c) 將引用存儲于正確創(chuàng)建的對象的final域
d) 使用鎖
希望本文所述對大家的java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Spring Boot實(shí)戰(zhàn)之netty-socketio實(shí)現(xiàn)簡單聊天室(給指定用戶推送消息)
本篇文章主要介紹了Spring Boot實(shí)戰(zhàn)之netty-socketio實(shí)現(xiàn)簡單聊天室(給指定用戶推送消息),具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03SpringBoot后端接口的實(shí)現(xiàn)(看這一篇就夠了)
這篇文章主要介紹了SpringBoot后端接口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09深入理解Java設(shè)計(jì)模式之職責(zé)鏈模式
這篇文章主要介紹了JAVA設(shè)計(jì)模式之職責(zé)鏈模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解2021-11-11Kafka日志清理實(shí)現(xiàn)詳細(xì)過程講解
這篇文章主要為大家介紹了Kafka日志清理實(shí)現(xiàn)詳細(xì)過程講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05RestTemplate get請求攜帶headers自動(dòng)拼接參數(shù)方式
這篇文章主要介紹了RestTemplate get請求攜帶headers自動(dòng)拼接參數(shù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java字節(jié)碼增強(qiáng)技術(shù)知識點(diǎn)詳解
在本篇文章里小編給大家整理的是一篇關(guān)于Java字節(jié)碼增強(qiáng)技術(shù)知識點(diǎn)詳解內(nèi)容,有興趣的朋友可以跟著學(xué)習(xí)下。2021-08-08SpringBoot接入釘釘自定義機(jī)器人預(yù)警通知
本文主要介紹了SpringBoot接入釘釘自定義機(jī)器人預(yù)警通知,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07