當前位置:
首頁 > 知識 > java多線程基礎知識總結二三點

java多線程基礎知識總結二三點

今天把多線程的基礎知識進行一下總結:

線程生命周期

Java中的多線程有三種實現方式:

1.繼承Thread類,重寫run方法。Thread本質上也是一個實現了Runnable的實例,他代表一個線程的實例,並且啟動線程的唯一方法就是通過Thread類的start方法。

2.實現Runnable介面,並實現該介面的run()方法.創建一個Thread對象,用實現的Runnable介面的對象作為參數實例化Thread對象,調用此對象的start方法。

3.實現Callable介面,重寫call方法。Callable介面與Runnable介面的功能類似,但提供了比Runnable更強大的功能。有以下三點

1).Callable可以在人物結束後提供一個返回值,Runnable沒有提供這個功能。

2).Callable中的call方法可以拋出異常,而Runnable的run方法不能拋出異常。

3).運行Callable可以拿到一個Future對象,表示非同步計算的結果,提供了檢查計算是否完成的方法。

需要注意的是,無論用那種方式實現了多線程,調用start方法並不意味著立即執行多線程代碼,而是使得線程變為可運行狀態。

run、 start的區別

start方法是啟動一個線程,而線程中的run方法來完成實際的操作。

如果我們直接調用run方法,那麼就會將這個方法當作一個普通函數來調用,並沒有多開闢線程,如果希望多線程非同步執行,則需要調用start方法。

sleep wait的區別

1.兩者處理的機制不同,sleep方法主要是,讓線程暫停執行一段時間,時間一到自動恢復,並不會釋放所佔用的鎖,當調用wait方法以後,他會釋放所佔用的對象鎖,等待其他線程調用notify方法才會再次醒來。

2.sleep是Threa的靜態方法,是用來控制線程自身流程的,而wait是object的方法,用於進行線程通信。

3.兩者使用的區域不同。sleep可以在任何地方使用,wait必須放在同步控制方法,或者語句塊中執行。

synchronized notify wait的運用

synchronized關鍵字有兩種用法,synchronized方法和synchronized語句塊。

public synchronized void function(){}

synchronized(object){}

當某個資源被synchronized所修飾,線程1線程2等多個線程在共同請求這個資源,線程1先請求到,調用了對象的wait方法釋放了對象的鎖,此時線程2可以對這個對象進行訪問,在工作結束時可以調用對象的notify方法,喚醒等待隊列中正在等待的線程,此時被喚醒的線程將會再一次拿到對象鎖,對對象進行操作。可以調用notifyAll方法,喚醒等待隊列中的所有線程。

需要注意的是一個線程被喚醒不代表立即獲取對象鎖,必須等調用的線程對象的方法推出synchronized塊釋放對象鎖後,被喚醒的進程才會獲得對象鎖。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT技術java交流 的精彩文章:

Java 基礎中一些值得聊的話題 載入篇
想入門web前端,這些時下最熱、使用最廣泛的前端框架你得懂
Web前端開發是什麼?從來沒有一篇文章講的如此詳細
當你寫Java HelloWorld時候,背後到底發生什麼?
解析JavaScript函數的多種寫法

TAG:IT技術java交流 |

您可能感興趣

android 多線程編程
muduo——EventLoop處理線程安全的問題
Python的Socket知識6:線程、線程鎖、線程池、上下文管理
疑似AMD新線程撕裂者CPU跑分數據現身Geekbench
深入理解Flutter引擎線程模式
Envoy為什麼能戰勝Ngnix——線程模型分析篇
Spring 中獲取 request 的幾種方法,及其線程安全性分析
為你詳細解析Python中的線程與進程的區別
Android 進程和線程
三代ryzen處理器配合新版BIOS:單線程性能大漲
多核性能吊打Intel旗艦!AMD第二代線程撕裂者實測
入門Python多線程/多進程編程
線程池ThreadPoolExecutor里Control state,ctl參數的分析(二)
線程池ThreadPoolExecutor里Control state,ctl參數的分析(一)
專訪AMD James 第二代線程撕裂者亮相
你懂ThreadPoolExecutor線程池技術嗎?看源碼你會有全新的認識
python threading中處理主進程和子線程的關係
詳解 Tomcat 的連接數與線程池
正式支持多線程!Redis 6.0與老版性能對比評測
realme新機現身GeekBench CPU多線程得分4618