最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線程 中斷機制及實例詳解

 更新時間:2019年09月06日 08:21:51   作者:慢慢來  
這篇文章主要介紹了Java多線程 中斷機制及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

正文

這里詳細分析interrupt(),interrupted(),isInterrupted()三個方法

interrupt()

中斷這個線程,設置中斷標識位

  public void interrupt() {
    if (this != Thread.currentThread())
      checkAccess();
    synchronized (blockerLock) {
      Interruptible b = blocker;
      if (b != null) {
        interrupt0();      // Just to set the interrupt flag
        b.interrupt(this);
        return;
      }
    }
    interrupt0();
  }

我們來找下如何設置中斷標識位的

找到interrupt0()的源碼,src/hotspot/share/prims/jvm.cpp

JVM_ENTRY(void, JVM_Interrupt(JNIEnv* env, jobject jthread))
 ...
 if (is_alive) {
  // jthread refers to a live JavaThread.
  Thread::interrupt(receiver);
 }
JVM_END

調用了Thread::interrupt方法

src/hotspot/share/runtime/thread.cpp

void Thread::interrupt(Thread* thread) {
 ...
 os::interrupt(thread);
}

os::interrupt方法,src/hotspot/os/posix/os_posix.cpp

void os::interrupt(Thread* thread) {
 ...
 OSThread* osthread = thread->osthread();
 if (!osthread->interrupted()) {
  //設置中斷標識位
  osthread->set_interrupted(true);
  ...
 }
  ...
}

isInterrupted()

測試線程是否被中斷,線程的中斷狀態(tài)不會改變

public boolean isInterrupted() {
    return isInterrupted(false);
  }

查看native isInterrupted(boolean ClearInterrupted)源碼,查找方式同上

src/hotspot/os/posix/os_posix.cpp

bool os::is_interrupted(Thread* thread, bool clear_interrupted) {
 debug_only(Thread::check_for_dangling_thread_pointer(thread);)
 OSThread* osthread = thread->osthread();
 // 查看是否被中斷
 bool interrupted = osthread->interrupted();
 // 清除標識位后再設置false
 if (interrupted && clear_interrupted) {
  osthread->set_interrupted(false);
 }
 return interrupted;
}

Java傳遞ClearInterrupted為false,對應C++的clear_interrupted

interrupted()

測試線程是否被中斷,清除中斷標識位

  public static boolean interrupted() {
    return currentThread().isInterrupted(true);
  }

簡單的例子

public class MyThread45 {
  public static void main(String[] args) throws Exception
  {
    Runnable runnable = new Runnable()
    {
      public void run()
      {
        while (true)
        {
          if (Thread.currentThread().isInterrupted())
          {
            System.out.println("線程被中斷了");
            return ;
          }
          else
          {
            System.out.println("線程沒有被中斷");
          }
        }
      }
    };
    Thread t = new Thread(runnable);
    t.start();
    Thread.sleep(500);
    t.interrupt();
    System.out.println("線程中斷了,程序到這里了");
  }
}

檢查線程是否中斷,中斷線程,運行結果如下

······
線程沒有被中斷
線程沒有被中斷
線程沒有被中斷
線程被中斷了
線程中斷了,程序到這里了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java日常練習題,每天進步一點點(40)

    Java日常練習題,每天進步一點點(40)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • idea創(chuàng)建JAVA Class時自動生成頭部文檔注釋的方法

    idea創(chuàng)建JAVA Class時自動生成頭部文檔注釋的方法

    這篇文章主要介紹了idea創(chuàng)建JAVA Class時自動生成頭部文檔注釋的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 因不會遠程debug調試我被項目經理嘲笑了

    因不會遠程debug調試我被項目經理嘲笑了

    這篇文章主要介紹了遠程debug調試的相關內容,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • springboot集成WebSockets廣播消息(推薦)

    springboot集成WebSockets廣播消息(推薦)

    這篇文章主要介紹了springboot-集成WebSockets廣播消息,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Java設計模式中的建造者(Builder)模式解讀

    Java設計模式中的建造者(Builder)模式解讀

    這篇文章主要介紹了Java設計模式中的建造者(Builder)模式解讀, 建造者模式是一種創(chuàng)建對象的設計模式,它通過將對象的構建過程分解為多個步驟,并使用一個建造者類來封裝這些步驟,從而使得對象的構建過程更加靈活和可擴展,需要的朋友可以參考下
    2023-10-10
  • 如何利用java中String類的substring()字符串截取最后一個字符

    如何利用java中String類的substring()字符串截取最后一個字符

    Java中的String是不可變的類型,因此substring()方法并不會改變原字符串,而是返回了一個新的字符串,這篇文章主要介紹了如何利用java中String類的substring()字符串截取最后一個字符,需要的朋友可以參考下
    2023-11-11
  • java集合進行排序的方式總結

    java集合進行排序的方式總結

    在本篇文章里小編給大家整理的是一篇關于java集合進行排序的兩種方式總結,有興趣的朋友們可以學習參考下。
    2021-08-08
  • 詳解Spring boot使用Redis集群替換mybatis二級緩存

    詳解Spring boot使用Redis集群替換mybatis二級緩存

    本篇文章主要介紹了詳解Spring boot使用Redis集群替換mybatis二級緩存,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JAVA IO API使用詳解

    JAVA IO API使用詳解

    本文通過理論、用法、實例詳細說明了JAVA IO的使用,大家參考其中的實例代碼實現(xiàn)自己的JAVA IO程序
    2013-11-11
  • 詳解Java編程中線程同步以及定時啟動線程的方法

    詳解Java編程中線程同步以及定時啟動線程的方法

    這篇文章主要介紹了詳解Java編程中線程同步以及定時啟動線程的方法, 講到了wait()與notify()方法以及阻塞隊列等知識,需要的朋友可以參考下
    2016-01-01

最新評論

满洲里市| 砚山县| 昌黎县| 饶河县| 阜阳市| 鄂州市| 林甸县| 黔东| 贞丰县| 呈贡县| 兖州市| 稷山县| 炉霍县| 泗阳县| 黑水县| 常山县| 江川县| 武强县| 夏邑县| 左贡县| 垣曲县| 盱眙县| 荔浦县| 同德县| 英超| 江都市| 海丰县| 绥江县| 三江| 洪泽县| 苍南县| 蓬莱市| 衡阳市| 丰都县| 安乡县| 咸宁市| 桂林市| 乐山市| 平远县| 河池市| 鄂州市|