日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java并发编程之介绍

發布時間:2025/7/25 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java并发编程之介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

并發編程簡介
將串行執行部分編程并發執行,但要考慮上下文切換和資源調度的時間
并發編程的意義及影響多線程的因素
并發編程的目的是為了讓程序運行得更快,但是,并不是啟動更多的線程就能讓程序最 大限度地并發執行。
影響多線程運行速度的原因有上下文切換、死鎖,以及硬件和軟件的資源限制等
資源限制:硬件資源和軟件資源
硬件資源:如寬帶 硬盤讀寫 內存 cpu處理速度
軟件資源:如數據庫連接數、socket連接數等
上下文切換
即使是單核處理器也支持多線程執行代碼,CPU通過給每個線程分配CPU時間片來實現這個機制。時間片是CPU分配給各個線程的時間,因為時間片非常短,所以CPU通過不停地切
換線程執行,讓我們感覺多個線程是同時執行的,時間片一般是幾十毫秒(ms)。
CPU通過時間片分配算法來循環執行任務,當前任務執行一個時間片后會切換到下一個任務。但是,在切換前會保存上一個任務的狀態,以便下次切換回這個任務時,可以再加載這個任務的狀態。所以任務從保存到再加載的過程就是一次上下文切換。
上下文切換也會影響多線程的執行速度
多線程程序的評量標準
安全性——不損壞對象
暗指對象的字段所取得的值并非預期值
生存性——進行必要的處理
復用性——可再利用類
性能——能快速、大量進行處理

多線程執行不一定比串行執行快
除了上面提到的影響多線程的原因,還有線程有創建和上下文切換的開銷
但可以通過調優減少上下文切換的方法有無鎖并發編程、CAS算法、使用最少線程和使用協程。因為多線程競爭鎖時,會引起上下文切換。

協程:在單線程里實現多任務的調度,并在單線程里維持多個任務間的切換。
并發工具分析
vmstat可以測量上下文切換的次數
用jstack命令dump線程信息,可以查看指定pid的進程里的線程都在做什么,例如:jstack pid,可以使用jstack pid > dump,然后使用:
grep java.lang.Thread.State dump17|awk '{print $2$3$4$5}'|sort|uniq -c做統計,可以查看當前運行RUNNABLE、WAITING等狀態的數量
死鎖
兩個線程分別獲取了鎖定,互相等待另一線程解除鎖定的現象。發生死鎖時,哪個線程都不能執行下去,所以程序就失去了生命性。
避免一個線程同時獲取多個鎖,避免一個線程在鎖內同時占用多個資源,盡量保證每個鎖只占用一個資源。嘗試使用定時鎖,使用lock.tryLock(timeout)來替代使用內部鎖機制。對于數據庫鎖,加鎖和解鎖必須在一個數據庫連接里,否則會出現解鎖失敗的情況。

引用書籍:《Java并發編程藝術》《Java多線程設計模式》

轉載于:https://blog.51cto.com/5052880/2338327

總結

以上是生活随笔為你收集整理的Java并发编程之介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。