2 暫停 停止執行緒

2021-09-11 07:43:43 字數 981 閱讀 7502

1.停止執行緒方法

interrupt()、 stop()、interrupt()、return();

2.為何用interrupt 而不用stop,

因stop方法直接強行停止過於暴力,直接停止,當前執行緒不會執行完畢,後續清理過程不到位,且對鎖定的資料進行解鎖,導致資料得不到同步處理,使得資料不一致,容易出錯。

而在使用interrupt方法後,不會終止乙個正在執行的執行緒,還需加入判斷才會完成執行緒的最終停止;

3.執行緒是否終止的判斷

1)this.interrupted():測試當前執行緒是否中斷,執行後將狀態標誌清除為false;

2)this.isinterrupted: 測試執行緒是否已經中斷,執行後不清除狀態標誌。

4.interrupt()方法的使用

1).異常法

在用this.interrupted()方法判斷已經是停止狀態後;throw new interruptedexception(),丟擲異常,然後在try{}catch{}進行停止執行緒後的操作;

2).interrupt()搭配return;

在用this.interrupted()方法判斷已經是停止狀態後使用return使執行緒停止,但仍推薦異常法,因return不會丟擲錯誤,使得不清楚是什麼時候執行緒終止的,終止後的執行緒也無法進行乙個更合理的處理

5.暫停執行緒

1).suspend()方法暫停執行緒;resume()方法繼續開始執行緒

缺點:獨佔、不同步;兩個方法使用不當,容易造成公共的同步物件的獨佔,使得其他執行緒無法訪問公共的同步物件;

獨佔:如在迴圈呼叫println列印時候進行suspend方法停止,後面的所有println列印都將無法進行,因println是乙個同步方法,而suspend將其暫停了

不同步:容易出現因執行緒暫停導致的資料不同步,如賦值中途使用了suspend暫停,而此時又有使用者在呼叫該資料,而呼叫後,該執行緒有resume()開始執行,最後所呼叫到的資料就會出現嚴重不一致。

WinFrom 執行緒的使用(開啟 暫停 停止)

方法一 啟用執行緒 private void form1 load object sender,eventargs e int i 0 public void geticount 停止執行緒 public void stopthread th.abort 停止執行緒 方法二 public void ...

C 實現系統服務暫停 停止 啟動

名稱 系統服務管理 語言 c 介紹 對windows系統服務的狀態獲取,服務暫停,開啟,停止操作 void cstartservicedlg onbnclickedbutton1 開啟www服務。sc handle hsvc openservice hsc,w3svc service start s...

android Thread 停止 開始 暫停

package com.example.thread import android.os.bundle import android.view.menu import android.view.view import android.view.view.onclicklistener import ...