Java多執行緒程式設計核心技術(一)Java多執行緒技能
主題:
這套文章主要是把書上的內容自己消化一遍,把核心內容跟重點挑出來。讀者可以用最少的時間瞭解這本書的內容。
第一章主要講解多執行緒的概念,使用方法,一些基本的api;每小節的內容不超過十句話的總結如下:
層級結構上是:
1.1程序跟多執行緒的概念;
1.程序可以理解為電腦的exe程式,執行緒可以理解為程序中單獨執行的子任務;
2.多執行緒可以提高系統cpu使用率,執行效率得到提升
3.多執行緒是非同步的,執行順序並不是程式碼的順序
1.2如何使用多執行緒;
1.繼承Thread類,實現Runable介面;如MyThread extends Thread; Myrunalble implements Runable
2.Thread類本身也實現了runable介面
3.start方法通知“”執行緒規劃器“已經準備就緒,等待呼叫run方法,直接調run的話就是事實啟動不是非同步的了。
4.Thread的建構函式可以傳入Runable介面,如Thread a = new Thread(new Runable());
5.變數例項分為共享和不共享之分,共享變更可能因為執行緒同步的問題出現數據上的差異,要使用synchronized關鍵字;
6.printIn()方法中,雖然這個方法是同步的,但是i--的操作是在printIn()之前發生。所以有非執行緒安全問題的概率。
1.3currentThread方法
1.Thread.currentThread().getName();
2.this.getTime()
1.4isAlive方法
1.活動狀態是指執行緒已經啟動並且尚未終止,執行緒處於正在執行或者準備開始執行的狀態,此時會認為執行緒是存活的。
2.Mythread.isAlive();
1.5sleep方法
1.讓當前執行緒休眠(暫停執行)
1.6getID方法
1.獲取執行緒的唯一標識
1.7停止執行緒
1.處理完任務之前停止正在做的操作。
2.使用stop可以立即停止,但是不贊成使用(不安全);更推薦使用Thread.interrupt;此方法不會終止一個正在執行的執行緒,要加上判斷才能停止。
3.interrupt只是在執行緒中打了一個停止的標記。並不會真的停止。
4.this.interrupted();測試當前執行緒是否已經中斷。會清除狀態。this.isInterrupted();測試執行緒thread是否已經中斷
5.推薦終止執行緒的方法。this.interrupted()。手動建立異常後面用異常捕獲。
6.如果在sleep狀態下停止執行緒,會進入異常
7.stop方法不推薦使用是因為執行緒停止可能會導致一些清理工作得不到完成,可能會鎖定的物件進行了解鎖,出現數據不一致的問題。
1.8暫停執行緒
1.可以使用suspend暫停執行緒,resume恢復執行緒執行。
2.如果加了sync關鍵字,暫停執行緒後沒有恢復,可能導致公共資源無法訪問。沒加關鍵字,暫停之後可能出現數據不一致
1.9yield方法
1.放棄當前的cpu資源,讓其他的任務去佔用cpu;
2.Thread.yield();
1.10執行緒的優先順序
1.設定執行緒可以使用setPriority(),在java中,執行緒分了1-10個等級。
2.優先順序是可以繼承的。如果是a執行緒啟動的b執行緒,那b的執行緒與a的執行緒優先順序一樣的。
3.cpu會把資源讓給優先順序比較高的執行緒
4優先順序有隨機性,優先順序高的不一定每一次都先執行完。
1.11守護執行緒
1.執行緒分兩種,一種是使用者執行緒,一種是守護執行緒。
2.守護執行緒守護一個非守護執行緒,當不存在非守護執行緒了,守護執行緒欄位銷燬
3。典型的守護執行緒如垃圾回收執行緒。
總結:
主要學習執行緒的api