亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java并發編程 - 基礎

2019-11-06 06:18:10
字體:
來源:轉載
供稿:網友

并發的歷史

操作系統的發展使得多個程序能夠同時運行, 由操作系統來分配資源, 如果需要的話, 進程會通過一些原始的機制相互通信, 主要分為消息傳遞和共享內存兩種:

消息傳遞: Socket, 信號處理(signal handlers), 信號量(semaphores)和文件等.

共享內存

線程共享其所屬進程的內存地址空間, 因此所有同一進程中的線程訪問相同的變量, 并從同一個堆中分配對象, 這相對于進程間通信(inter-PRocess)機制來說實現了良好的數據共享. 但是如果沒有明確的同步來管理共享數據, 一個線程可能會修改其他線程正在使用的數據, 產生意外的結果.


線程簡介

線程優先級

java線程中, 通過一個int變量priority來控制優先級, 范圍為1~10, 通過setPriority(int)方法來修改優先級, 默認優先級是5, 操作系統通常會忽略自己手動設定的線程優先級(比如Mac OS X, Ubuntu等), 作為程序開發者一般也不需要手動調整

線程的狀態

一共有6種可能的狀態:

狀態名稱 說明
NEW 初始狀態, 僅被構建, 沒有啟用start()方法
RUNNABLE 可運行狀態, 將操作系統中定義的’就緒’和’運行’統稱為’RUNNABLE’
BLOCKED 阻塞狀態, 需要獲取鎖
WAITING 等待狀態, 需要其他線程發出通知或者中斷, 然后重新競爭鎖
TIMED_WAITING 定時等待狀態, 和WAITING類似, 不過不會無限等待,具有一個超時自動返回的功能, 不會引起鎖持有狀況的變化
TERMINATED 終止狀態, 線程已執行完畢

可以使用jstack工具來進行查看運行時線程的信息, 步驟如下:

使用jps命令查看Java進程;找出當前運行程序的進程號, 這里以2100為例, 運行jstack 2100即可.

Java線程狀態變遷示意圖:

Java線程狀態變遷示意圖

Daemon線程

Daemon線程是一種后臺支持型線程, 因為它主要被用作程序中后臺調度以及支持性工作. 當一個JVM中不存在非Daemon線程的時候, JVM將會立即退出(所以不能在finally塊中執行關閉或者清理資源的邏輯)

線程間通信

volatile和synchronized關鍵字

實際上是通過共享內存實現的線程間通信.

通知/等待機制

是任何Java對象都具備的, 這些方法定義在java.lang.Object上:

方法名稱 描述
notify() 通知一個在對象上等待的線程, 使其從wait()方法返回, 而返回的前提是該線程獲取到了對象的鎖
notifyAll() 通知所有等待在該對象上的線程
wait() 調用該方法的線程進入WAITING狀態, 同時釋放對象鎖, 只有等待另外線程的通知或被中斷才會返回
wait(long) 定時等待, 單位毫秒, 超時返回
wait(long, int) 更細粒度的定時, 可以達到納秒級別

等待/通知的經典范式

就是消費者/生產者模型

Thread.join()的使用

實際上是通知/等待機制的一種實現.

ThreadLocal的使用

是線程變量, 以ThreadLocal對象為鍵, 任意對象為值的存儲結構. 這個結構是與線程對象綁定的, 也就是說即使是使用線程不安全的數據結構, 如此包裝后也可以安全使用.


并發編程中的挑戰

并發編程中有許多單線程程序中沒有的挑戰.

上下文切換

即使是單核CPU也支持多線程執行代碼, CPU會通過給每個線程分配CPU時間片來實現這個機制. 時間片一般是幾十毫秒. 當前任務執行一個時間片后會切換到下一個任務, 但是在切換前會保存上一個任務的狀態, 以便下次切換回這個任務時, 可以再加載這個任務的狀態. 所以任務從保存到再加載的過程就是一次上下文切換. 上下文切換會影響多線程的執行速度.

并發執行的速度不一定比串行快, 因為線程有創建和上下文切換的開銷. 當并發運算次數較少的時候, 上下文切換的開銷會顯著影響累積計算時間.

如何較少上下文切換

無鎖并發編程

多線程競爭鎖時, 會引起上下文切換, 避免使用鎖的方法舉例: 通過將數據的ID按照Hash算法取模分段, 不同的線程處理不同段的數據.

CAS算法

Java的Atomic包使用的就是CAS算法來更新數據, 不需要加鎖, 舉例: AutomicLong類型

使用最少線程

避免大量線程處于等待狀態

協程

在單線程里實現多任務的調度, 在單線程里維持多個任務間的切換.

死鎖

避免死鎖的幾個方法

避免一個線程同時獲取多個鎖;嘗試使用定時鎖, 使用lock.tryLock(timeout)來替代使用內部鎖機制;

如何保證線程安全

使用無狀態對象

無狀態對象永遠是線程安全的

這里以一個Servlet為例, 說明什么叫做無狀態:

因為Servlet對象不包含屬性, 也沒有引用其他類的屬性, 只有本地變量. 本地變量唯一的存儲在本線程的棧中, 只有執行線程(本Servlet)才能訪問, 所以是線程安全的.

使用原子操作

讀-改-寫 不是原子的, 例如count++check-then-run, 不是原子的, 例如: if (i != null) i = new SomeClass();

無狀態+單個內置原子變量=線程安全, 但是兩個及以上的原子變量!=線程安全

為了維持狀態一致性, 必須將相關的狀態變量在同一個原子操作內更新

注意

并不是說將一個類的所有方法都標注成synchronized, 然后這個類就是線程安全的了, 舉個例子, 如果兩個屬性之間需要同步更新, 然后分別提供了setter方法, 那么在類外使用的時候, 就有可能引發安全問題.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产v综合v亚洲欧美久久| 国产成人自拍视频在线观看| 国产综合在线视频| 日韩精品电影网| 中文字幕最新精品| 岛国av一区二区在线在线观看| 久久视频在线看| 欧美性20hd另类| 欧美激情欧美狂野欧美精品| 两个人的视频www国产精品| 久久人人爽人人爽人人片av高请| 91精品久久久久久久久久| 日韩免费在线播放| 96精品视频在线| 欧美精品国产精品日韩精品| 亚洲直播在线一区| 国产精品丝袜久久久久久高清| 中文字幕日韩精品有码视频| 日韩欧美中文字幕在线播放| 欧美高清不卡在线| 中文字幕亚洲二区| 国产一区二区三区精品久久久| 精品国产乱码久久久久酒店| 欧美激情视频在线| 国内精品久久久久久中文字幕| 亚洲已满18点击进入在线看片| 国产精品久久久久久久av大片| 成人免费观看网址| 中文字幕日韩精品有码视频| 国产精品xxx视频| 国产综合久久久久| 51精品国产黑色丝袜高跟鞋| 97视频在线观看视频免费视频| 中文综合在线观看| 欧美成人免费va影院高清| 日韩av中文字幕在线| 欧美剧在线观看| 久久人人爽人人爽爽久久| 久久久av网站| 色综合久久久久久中文网| 欧美一级黑人aaaaaaa做受| 91国产高清在线| 国产大片精品免费永久看nba| 亚洲欧洲一区二区三区在线观看| 日本国产精品视频| 亚洲午夜精品久久久久久久久久久久| 国产精品无av码在线观看| 精品久久久久久久久久国产| 久久精品久久久久| 疯狂做受xxxx欧美肥白少妇| 亚洲嫩模很污视频| 亚洲成人网久久久| 91精品国产91久久| 国产精品十八以下禁看| 欧美精品videos| 日本午夜人人精品| 欧美日韩国产在线| 日韩欧美成人免费视频| 亚洲国产精品yw在线观看| 久久九九国产精品怡红院| 日韩欧美第一页| 日韩av在线看| 日本欧美精品在线| 最近中文字幕mv在线一区二区三区四区| 国产精品永久免费观看| 亚洲国产精品字幕| 日韩欧美一区二区在线| 欧美成人在线影院| 欧美亚洲成人xxx| 日韩成人激情在线| 国产不卡av在线| 国产日韩精品在线观看| 亚洲性69xxxbbb| 成人久久18免费网站图片| 视频在线观看99| 久久伊人91精品综合网站| 欧美插天视频在线播放| 亚洲精品v欧美精品v日韩精品| 欧美成aaa人片免费看| 日韩在线视频网站| 亚洲精品99久久久久| 欧美在线视频免费观看| 成人免费在线视频网址| 黑人欧美xxxx| 精品网站999www| 欧美成人免费播放| 国产精品久久久久av免费| 国产成人综合一区二区三区| 欧美精品中文字幕一区| 欧美日韩中文字幕日韩欧美| 日韩激情视频在线播放| 伊人一区二区三区久久精品| 国产精品久久久久久久美男| 欧美另类69精品久久久久9999| www.亚洲天堂| 欧美大片免费看| 亚洲成人精品av| 国产精品影片在线观看| 中文国产亚洲喷潮| 欧美午夜精品伦理| 日韩免费观看视频| 午夜精品视频在线| 日韩在线视频一区| 国产成人久久久| 97涩涩爰在线观看亚洲| 国产精品久久久久久久久久久久久久| 欧美电影在线免费观看网站| 伊是香蕉大人久久| 欧美中文字幕视频| 亚洲淫片在线视频| 尤物精品国产第一福利三区| 国产成人午夜视频网址| 97av视频在线| 久久精品视频在线观看| 国产v综合ⅴ日韩v欧美大片| 精品美女永久免费视频| 国产成人精品电影| 欧美精品一区二区免费| 亚洲理论片在线观看| 国产精品久久久久久影视| 亚洲一级免费视频| 超薄丝袜一区二区| 欧美日韩成人网| 国产精品99免视看9| 久久精品成人一区二区三区| 久久免费视频观看| 久久久久久久爱| 日本午夜精品理论片a级appf发布| 日韩精品中文在线观看| 992tv在线成人免费观看| 亚洲天堂成人在线| 91在线网站视频| 97婷婷大伊香蕉精品视频| 欧美福利视频在线观看| 亚洲激情国产精品| 亚洲欧美日韩一区二区三区在线| 成人高清视频观看www| 精品国产网站地址| 热99在线视频| 亚洲欧美综合精品久久成人| 国产精品成人aaaaa网站| 91在线色戒在线| 欧美日韩亚洲视频| 91精品国产精品| 久久久天堂国产精品女人| 亚洲国产欧美久久| 亚洲最大在线视频| 久久久久久久久久亚洲| 精品国偷自产在线视频99| 热久久免费视频精品| 日本精品va在线观看| 91中文字幕在线| 国产成人精品视频| 欧洲午夜精品久久久| 久久网福利资源网站| 亚洲精品成人av| 久久精品国产一区二区三区| 欧美寡妇偷汉性猛交| 日韩av在线免费观看| 亚洲va久久久噜噜噜久久天堂| 国内偷自视频区视频综合| 欧美不卡视频一区发布| 在线观看亚洲视频| 亚洲韩国欧洲国产日产av|