1. 程式人生 > >Java併發程式設計例項--3.打斷一個執行緒

Java併發程式設計例項--3.打斷一個執行緒

一般來講一個java程式如果執行著多個執行緒,那麼只有在這些執行緒都執行完畢後才會終止。
但有時候,我們需要去結束某個執行緒或者取消某個任務。此時就用到了Java執行緒的打斷機制,即interruption。

本例中,我們將開發一個程式建立執行緒,5秒後將強制打斷它。

PrimeGenerator.java
package com.dylan.thread.ch1.c03;

/**
 * @author xusucheng
 * @create 2018-04-22
 **/
public class PrimeGenerator extends Thread {
    @Override
    public void run() {
        long number = 1L;
        while (true){
            if(isPrime(number)){
                System.out.printf("Number %d is Prime.\n", number);
            }
            //判斷是否被打斷
            if(isInterrupted()){
                System.out.printf("The Prime Generator has been Interrupted");
                return;
            }
            number++;
        }
    }

    private boolean isPrime(long number){
        if(number<2){
            return true;
        }
        for (long i=2;i<number;i++){
            if((number%i)==0){
                return false;
            }
        }

        return true;
    }


}

Main.java

package com.dylan.thread.ch1.c03;

/**
 * @author xusucheng
 * @create 2018-04-22
 **/
public class Main {
    public static void main(String[] args) {
        Thread task = new PrimeGenerator();
        task.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        task.interrupt();
} }

輸出:

Number 1 is Prime.
Number 2 is Prime.
Number 3 is Prime.
Number 5 is Prime.

......

Number 82007 is Prime.
Number 82009 is Prime.
Number 82013 is Prime.
The Prime Generator has been Interrupted

相關推薦

Java併發程式設計例項--3.打斷一個執行

一般來講一個java程式如果執行著多個執行緒,那麼只有在這些執行緒都執行完畢後才會終止。但有時候,我們需要去結束某個執行緒或者取消某個任務。此時就用到了Java執行緒的打斷機制,即interruptio

Java併發程式設計3):執行掛起、恢復與終止的正確方法(含程式碼)

JAVA大資料中高階架構 2018-11-06 14:24:56掛起和恢復執行緒Thread 的API中包含兩個被淘汰的方法,它們用於臨時掛起和重啟某個執行緒,這些方法已經被淘汰,因為它們是不安全的,不穩定的。如果在不合適的時候掛起執行緒(比如,鎖定共享資源時),此時便可能會發生死鎖條件——其他執行緒在等待該

Java併發程式設計的藝術之九----執行

第一:降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。 第二:提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。 第三:提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源, 還會降低系統的穩定性,使用執行緒池可以進行統

Java併發程式設計(2):執行中斷(含程式碼)

使用interrupt()中斷執行緒當一個執行緒執行時,另一個執行緒可以呼叫對應的Thread物件的interrupt()方法來中斷它,該方法只是在目標執行緒中設定一個標誌,表示它已經被中斷,並立即返回。這裡需要注意的是,如果只是單純的呼叫interrupt()方法,執行緒並沒有實際被中斷,會繼續往下執行。

Java併發程式設計(二)多執行四種實現方式

Java實現多執行緒的方式 Java實現多執行緒的方式有4種: 繼承Thread方法、實現Runnable介面、實現Callable介面並通過FutureTask建立執行緒、使用ExecutorService。 其中,前兩種執行緒執行結果沒有返回值,後兩種是有返回值的。 1、繼承Th

Java併發程式設計(二)多執行程式設計

在上一節,我們介紹了程序與執行緒的概念,接下來介紹如何使用多執行緒(暫不介紹多程序)。 2. Thread物件 每個執行緒都對應一個Thread例項,存在兩種策略使用Thread類來建立併發程式。 直接進行執行緒的建立和管理,也就是當需要開啟一個非同

Java併發程式設計實戰》—— 第二章 執行安全性

編寫執行緒安全的程式碼,核心在於要對狀態訪問操作進行管理,特別是對共享的和可變的狀態的訪問。 物件的狀態 同步機制: synchronized(獨佔的加鎖方式) volatile 顯式鎖 原子變數 多個執行緒訪問同一個變數時,有3種方式保障安全

JAVA併發程式設計實踐》第二章 執行安全性

1.多執行緒環境為什麼會出現問題? 由於競態條件的存在。 競態條件:基於一種可能失效的觀察結果來做出判斷或執行某個計算 競態條件分兩種: - **先檢查後執行**

Java併發程式設計札記-(一)基礎-03執行的生命週期

本文主要講解Java中執行緒的狀態。Java中執行緒的狀態和作業系統中執行緒的狀態有所不同。 目錄 執行緒的生命週期 執行緒的狀態 執行緒的生命週期 此圖是根據自己的瞭解畫的,如果有不足或錯誤歡迎指正。 執行緒的狀態 Java中執行緒

java併發程式設計(十)之執行倒計數鎖存器CountDownLatch

一、定義一個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許一個或多個執行緒一直等待。用給定的計數 初始化 CountDownLatch。由於呼叫了 countDown() 方法,所以在當前計數到達零之前,await 方法會一直受阻塞。之後,會釋放所有等待的執行緒

Java併發程式設計的藝術(十一)——執行池(2)

Executor兩級排程模型 在HotSpot虛擬機器中,Java中的執行緒將會被一一對映為作業系統的執行緒。 在Java虛擬機器層面,使用者將多個任務提交給Executor框架,Execu

Java併發程式設計之set集合的執行安全類你知道嗎

Java併發程式設計之-set集合的執行緒安全類 Java中set集合怎麼保證執行緒安全,這種方式你知道嗎? 在Java中set集合是 本篇是《凱哥(凱哥Java:kagejava)併發程式設計學習》系列之《併發集合系列》教程的第二篇: 本文主要內容:Set集合子類底層分別是什麼?基於底層為什麼set的子類可

Java併發程式設計實戰(5)- 執行生命週期

在這篇文章中,我們來聊一下執行緒的生命週期。 [toc] # 概述 執行緒是作業系統中的一個概念,在Java中,它是實現併發程式的主要手段。 Java中的執行緒,本質上就是作業系統中的執行緒。 作業系統中的執行緒有“生老病死”,專業說法就是生命週期,雖然不同的開發語言對於作業系統的執行緒做了不同的封裝

Java併發程式設計詳解:多執行與架構設計

內容簡介 本書主要包含四個部分: 部分主要闡述 Thread 的基礎知識,詳細介紹執行緒的 API 使用、執行緒安全、執行緒間資料通訊,以及如何保護共享資源等內容,它是深入學習多執行緒內容的基礎。 第二部分引入了 ClassLoader,這是因為 ClassLoader 與執行緒不無關係

併發程式設計(一):執行基礎、執行之間的共享與協作

一、基礎概念 1.1 CPU核心數、執行緒數 **兩者的關係:**cpu的核心數與執行緒數是1:1的關係,例如一個8核的cpu,支援8個執行緒同時執行。但在intel引入超執行緒技術以後,cpu與執行緒數的關係就變成了1:2。此外在開發過程中並沒感覺到執行緒的限制,那是因為cpu

併發程式設計、並行、多執行、鎖、同步、非同步、多執行、單執行、阻塞io、非阻塞io

一、 cpu的每一個核在同一時間下,只能執行一個執行緒,就是單核同一時間只能執行一個執行緒 而cpu可以不停的切換,這樣就導致使用者感覺可以執行多個執行緒,這是併發,而不是並行 併發和並行 你吃飯吃到一半,電話來了,你一直到吃完了以後才去接,這就說明你不支援併發也不支

併發程式設計——為什麼volatile變數++操作執行不安全

學習volatile的時候也許我們會看到下面這句話: 對於volatile變數來說,自增操作執行緒不安全。   那為什麼不安全呢?本帥博主看的是《併發程式設計的藝術》這本書,這本書對這一事件也沒有做出很讓人易懂的解釋。那麼我們自己用例子

Java併發(九)Condition和執行順序執行

有的時候我們希望執行緒按照希望的順序依次執行,比如執行緒A,B,C,按照順序依次執行,這時候就要用到阻塞和喚醒,之前的時候我們學到過wait()和nofity/notifyAll()這兩個方法,這裡我們使用java.concurrent.locks.Lock介面

併發程式設計(一)多執行基礎

目錄 併發程式設計(一)多執行緒基礎 1、程序和執行緒的概念 2、為什麼要使用多執行緒 3、多執行緒使用的場景 4、多執行緒建立方式 4.1、繼承Thread類 4.2、實現Runable介面 4.3、匿名內部類 4.4、執行緒池(後面細說)

Java Socket程式設計(非阻塞多執行,NIO)

服務端:伺服器Server類public class Server implements Runnable { private int port; private volatile boolean stop; private Selector sele