<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 編寫ThreadService實現暴力結束線程 上一篇文章最后留下了一個問題,就是如果線程后面被阻塞了,該怎么辦?這結合之前學過的ThreadApi寫一個ThreadService來暴力結束線程。大致思路是:任務線程設置為調用線程的守護線程,通過main來啟動調用線程,從而執行任務線程。當需要停止線程的時候只需要中斷調用線程即可,調用線程生命周期結束時,為守護線程的任務線程會自動停止。需要注意的是任務線程可能執行完調用線程就結束了,這里任務線程就需要join一下了。雖然解釋起來有點繞但是多看幾遍,多敲幾遍就一覽眾山小了。 代碼如下: ```java package com.thread.thread09; /** * @program: ThreadDemo * @description: 暴力關閉線程 * @author: hs96.cn@Gmail.com * @create: 2020-09-05 */ public class ThreadService { // 調用線程 private Thread executeThread; private boolean finished = false; /** * 執行線程 * * @param task 任務 */ public void execute(Runnable task) { this.executeThread = new Thread(() -> { // 任務執行線程 Thread runner = new Thread(task); runner.setDaemon(true); runner.start(); try { runner.join(); finished = true; } catch (InterruptedException e) { } }); this.executeThread.start(); } /** * 關閉線程 * * @param mills 線程最長執行時間(單位:毫秒) */ public void shutdown(long mills) { long currentTime = System.currentTimeMillis(); while (!finished) { if (System.currentTimeMillis() - currentTime >= mills) { System.out.println("任務超時,需要結束線程!"); executeThread.interrupt(); break; } try { Thread.sleep(1); } catch (InterruptedException e) { System.out.println("執行線程被打斷!"); break; } } finished = false; } public static void main(String[] args) { ThreadService service = new ThreadService(); long startTime = System.currentTimeMillis(); service.execute(() -> { // 1. load a very heavy resource. /*while (true) { }*/ // 2. 線程執行5s后結束 try { Thread.sleep(5_000); } catch (InterruptedException e) { } }); service.shutdown(10_000); long endTime = System.currentTimeMillis(); System.out.println("執行時間為:" + (endTime - startTime)); } } ``` 其實這里面有很多細節的地方,比如runner是守護線程,他的生命周期依賴于executeThread,所以runner在start后要join()一下。比如finished作為標識來配合Thread.sleep(1)來實現時間的巧妙校驗,里面還有很多細節,慢慢細品。最近就不貼運行代碼了,因為家里的筆記本太卡了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看