java多執行緒開發 如何正確關閉執行緒
在java高階開發中,經常會碰到多執行緒,關於執行緒的關閉,可能會用stop() 方法,但是stop是執行緒不安全的,一般採用interrupt,判斷執行緒是否中止採用isInterrupted,
如果執行緒中有Thread.sleep方法,當設定中斷後,執行這個方法會丟擲異常,就務必在異常中繼續關閉執行緒
Thread thread = null;
thread = new Thread(new Runnable() {
@Override
public void run() {
/*
* 在這裡為一個迴圈,條件是判斷執行緒的中斷標誌位是否中斷
*/
while (true&&(!Thread.currentThread().isInterrupted())) {
try {
Log.i("tag","執行緒執行中"+Thread.currentThread().getId());
// 每執行一次暫停40毫秒
//當sleep方法丟擲InterruptedException 中斷狀態也會被清掉
Thread.sleep(40);
} catch (InterruptedException e) {
e. printStackTrace();
//如果丟擲異常則再次設定中斷請求
Thread.currentThread().interrupt();
}
}
}
});
thread.start();
//觸發條件設定中斷
thread.interrupt();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
在java高階開發中,經常會碰到多執行緒,關於執行緒的關閉,可能會用stop() 方法,但是stop是執行緒不安全的,一般採用interrupt,判斷執行緒是否中止採用isInterrupted,
如果執行緒中有Thread.sleep方法,當設定中斷後,執行這個方法會丟擲異常,就務必在異常中繼續關閉執行緒
Thread thread = null;
thread = new Thread(new Runnable() {
@Override
public void run() {
/*
* 在這裡為一個迴圈,條件是判斷執行緒的中斷標誌位是否中斷
*/
while (true&&(!Thread.currentThread().isInterrupted())) {
try {
Log.i("tag","執行緒執行中"+Thread.currentThread().getId());
// 每執行一次暫停40毫秒
//當sleep方法丟擲InterruptedException 中斷狀態也會被清掉
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
//如果丟擲異常則再次設定中斷請求
Thread.currentThread().interrupt();
}
}
}
});
thread.start();
//觸發條件設定中斷
thread.interrupt();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
相關推薦
java多執行緒開發 如何正確關閉執行緒
在java高階開發中,經常會碰到多執行緒,關於執行緒的關閉,可能會用stop() 方法,但是stop是執行緒不安全的,一般採用interrupt,判斷執行緒是否中止採用isInterrupted, 如果執行緒中有Thread.sleep方法,當設定中斷後,執行這個方法
Java執行緒狀態和關閉執行緒的正確姿勢
1、執行緒狀態及切換 Java中的執行緒有六種狀態,使用執行緒Thread內的列舉類來實現,如下,我對每個狀態都進行了一定的解釋。 public enum State { /** 表示一個執行緒還沒啟用(即未呼叫start方法)*/ NEW,
java執行緒池和關閉執行緒池中的執行緒
如果執行緒經常喜歡去new的話是不對的,你需要一個池子管理。 newCachedThreadPool 這個一個帶快取的執行緒池,是個可以無限大的執行緒池,新建的執行緒放倒這個池子裡,當執行緒停掉了的時候,下個個執行緒進來,可以複用這個執行緒。 newFixe
C#多執行緒開發10:執行緒同步之Semaphore類
Semaphore類表示訊號量。 訊號量和互斥類似,只是訊號量可以同時由多個執行緒使用,而互斥只能由一個執行緒使用。也就是說,使用訊號量時,可以多個執行緒同時訪問受保護的資源。下面例項演示了“學生到食
C#多執行緒開發5:執行緒的Abort和Interrupt方法
使用執行緒的Abort方法可以終止執行緒;而使用執行緒的Interrupt方法只可以中斷處於 WaitSleepJoin 狀態的執行緒,當執行緒狀態不再為WaitSleepJoin時,執行緒將恢復執行
Java微信支付開發之關閉訂單
官方文件一、應用場景商戶訂單支付失敗需要生成新單號重新發起支付,要對原訂單號呼叫關單,避免重複支付系統下單後,使用者支付超時,系統退出不再受理,避免使用者繼續,請呼叫關單介面注意:訂單生成後不能馬上呼叫關單介面,最短呼叫時間間隔為5分鐘。二、介面地址https://api.m
Java執行緒安全與多執行緒開發
網際網路上充斥著對Java多執行緒程式設計的介紹,每篇文章都從不同的角度介紹並總結了該領域的內容。但大部分文章都沒有說明多執行緒的實現本質,沒能讓開發者真正“過癮”。 從Java的執行緒安全鼻祖內建鎖介紹開始,讓你瞭解內建鎖的實現邏輯和原理以及引發的效能問題,接著說明了Java多執行緒程式設計中鎖的存在是為
Java多執行緒開發——一個簡單的數字加減小例子
範例: 兩個執行緒實現加法,兩個執行緒實現減法 class Resource { private int num = 0; private boolean flag = true; //flag = true 表示可以進行加法操作,不能進行減法操作 //flag = fa
JAVA多執行緒————一篇文章讓你徹底征服多執行緒開發(一)
多執行緒的基本概念 執行緒指程序中的一個執行場景,也就是執行流程,那麼程序和執行緒有什麼區別呢? 每個程序是一個應用程式,都有獨立的記憶體空間 同一個程序中的執行緒共享其程序中的記憶體和資源(共享的記憶體是堆記憶體和方法區記憶體,棧記憶體不共享,
JAVA多執行緒————一篇文章讓你徹底征服多執行緒開發
多執行緒的基本概念執行緒指程序中的一個執行場景,也就是執行流程,那麼程序和執行緒有什麼區別呢?每個程序是一個應用程式,都有獨立的記憶體空間同一個程序中的執行緒共享其程序中的記憶體和資源(共享的記憶體是堆記憶體和方法區記憶體,棧記憶體不共享,每個執行緒有自己的。)什麼是程序?一
Java | 多執行緒 | ThreadLocal結合線程池的正確使用方式
1)問題: 才發現,寫這篇部落格之前,自己一直在以一種錯誤的姿勢在用threadLocal物件。 場景就是threadLocal在專案中使用時,出現取值錯誤的情況。花了不少時間排查,最終還是排查到執行緒池上。之前一直沒有問題,或許是因為併發不高。最終今天還是遇到
從阿里Java開發手冊學習執行緒池的正確建立方法
前言 最近看阿里的 Java開發手冊,上面有執行緒池的一個建議: 【強制】執行緒池不允許使用 Executors 去建立,而是通過 ThreadPoolExecutor 的方式,這樣的處理方式讓寫的同學更加明確執行緒池的執行規則,規避資源耗盡的風險。 結合最近面試的經歷,發現這
執行緒池 多執行緒執行結束後 如何關閉? ExecutorService的正確關閉方法
前言 最近在使用ExecutorService的時候,對於與ExecutorService相關的概念有些迷糊, 加上本身ExecutorService內部的有些方法名在取名上也容易讓使用者誤解,導致 犯了一些錯誤。在解決的過程中,偶爾看到了日本人寫的一篇文章簡單明瞭
java 多執行緒開發注意事項
多執行緒開發的三大特性 有序性 可見性 對修改後的資料可以看到擁有可見性 原子性 程式碼在執行的時候必須一次執行完,一次成功或者是一次失敗,一次執行緒對一段程式碼有掌控,就像事務裡面的原子一樣 執行緒,本地記憶體你,駐村互動圖 在jvm
多執行緒使用ZK客戶端可能會出現的問題。java.io.IOException: 遠端主機強迫關閉了一個現有的連線。
java.io.IOException: 遠端主機強迫關閉了一個現有的連線。 at sun.nio.ch.SocketDispatcher.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(So
Java多執行緒實現電影院售票案例
某電影院目前正在上映賀歲大片,共有100張票,而它有3個售票視窗,請設計一個程式模擬該電影院售票。 定義Sell類實現Runnable介面,很好的解決了單繼承共享資源問題 public class Sell implements Runnable { // 定義100張票,三個售票
java多執行緒物件鎖、類鎖、同步機制詳解
1.在java多執行緒程式設計中物件鎖、類鎖、同步機制synchronized詳解: 物件鎖:在java中每個物件都有一個唯一的鎖,物件鎖用於物件例項方法或者一個物件例項上面的。 類鎖:是用於一個類靜態方法或者class物件的,一個
Java 多執行緒實現死鎖場景
簡述: 《Java 程式設計思想》 P718 ~ P722 模擬死鎖的場景, 三個人 三根筷子,每個人需要拿到身邊的兩根筷子才能開始吃飯 出現死鎖的場景是,三個人都拿到了右邊的筷子,但是由於筷子都被搶佔,均無法獲得左邊的筷子 Chopstick.java
Java 多執行緒 join和interrupt 方法
簡述: 使用Java多執行緒中join和interrupt函式 《Java程式設計思想》 P669 ~ P670 一個執行緒可以再其他執行緒上呼叫join()方法,其效果是等待一段時間直到第二個執行緒結束才繼續執行。 如果某個執行緒在另一個執行緒t上呼叫t.join(), 此
Java 多執行緒 CountDownLatch 試用
簡述: 使用Java多執行緒的庫,包括 ExecutorService執行緒池, CountDownLatch執行緒執行控制(知道所有啟動的執行緒呼叫完成後,函式才會繼續執行) package test.anialy.multithread; import java.ut