国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - idea以任意順序debug多線程程序的具體用法

idea以任意順序debug多線程程序的具體用法

2021-12-09 11:05Java與大數據進階 Java教程

在idea中使用debug可以讓多個線程以任意順序執行,接下來通過本文給大家介紹idea以任意順序debug多線程程序的具體用法,需要的朋友參考下吧

idea中使用debug可以讓多個線程以任意順序執行,先介紹一下基礎知識,然后介紹具體做法。

 

1 debug 兩類 Supspend

在斷點處右鍵,可以看到Suspend分兩類,一類是All,一類是Thread。當某個線程到達斷點處會觸發Suspend,All會使得所有線程都暫停,Thread只會使當前觸發的線程暫停,其他線程不受影響。

在idea中使用debug可以讓多個線程以任意順序執行,先介紹一下基礎知識,然后介紹具體做法。

idea以任意順序debug多線程程序的具體用法

以下面的代碼為例,有3個MyThread線程以及一個主線程main。3個線程分別睡眠 1/2/3 秒,主線程睡眠 5 秒。下面分三種情況查看結果:

  1. 正常執行,執行完的順序為 1, 2, 3, main
  2. 在斷點1處打斷點,設置為 All,在線程1觸發后所有線程均暫停,可以通過Resume繼續執行下一個斷點,正常情況應該是3次Resume才能結束,但在有些時候idea會提示 skipped breakpoint at because it happened inside debugger evaluation,會跳過一些斷點,這可能是ide本身的問題,可以在Settings->Build … ->Debugger->Data Views->Java中 取消 Enable ‘toString()" object view。
  3. 在斷點1處打斷點,設置為 Thread,3個子線程都會在斷點處暫停,main線程沒有暫停,會先執行完。
package org.example;

public class Test{
    public static void main(String arg[]){
        MyThread thread1 = new MyThread(1);
        MyThread thread2 = new MyThread(2);
        MyThread thread3 = new MyThread(3);

        thread1.setName("Thread 1");
        thread2.setName("Thread 2");
        thread3.setName("Thread 3");

        thread1.start();
        thread2.start();
        thread3.start();

        try {
            Thread.sleep(1000*5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("主線程完成");
    }

    private static class MyThread extends Thread {
        private int num;
        public MyThread(int num) {
            this.num = num;
        }
        @Override
        public void run() {
            String name = Thread.currentThread().getName();
            try {
                Thread.sleep(1000*num);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"斷點1"); //斷點1
            System.out.println(Thread.currentThread().getName()+"斷點之間執行");
            System.out.println(Thread.currentThread().getName()+"斷點2"); //斷點2       
        }
    }

 

2 按照順序執行線程

在子線程打兩個Thread斷點,通過Frames控制子線程的執行順序,假設斷點之間的執行順序為3, 2, 1, 2, 1, 3。其中第一次執行從斷點1開始,執行到斷點2之前,第二次執行會執行斷點2并結束。

如果感覺不好理解,可以將MyThread換成三個不同的類分別對應三個線程,在三個類中分別打斷點。這里我不再替換。

debug運行,稍等一會,三個線程都會到第一個斷點停下,此時未有任何輸出,注意在左下角Frames的菜單,點開,會發現三個線程都在Frames內,這說明三個線程都已經暫停,有時候下拉框會有main,但其實main不會暫停。

idea以任意順序debug多線程程序的具體用法

想先執行Thread 3,則在下拉框選擇Thread 3,點一下Resume,此時Thread 3的第一個斷點和斷點之間的代碼執行,Thread 3暫停在第二個斷點上,其他暫停的線程不受影響。

idea以任意順序debug多線程程序的具體用法

對應的后續執行順序是,切換到Thread 2/1/2/1/3,每次切換都Resume一次。

總結:想讓哪個線程先執行就在下拉框切換到相應的線程,并Resume,則該線程執行到下一個斷點,如果沒有下一個斷點則會一直執行直到結束。此時,其他暫停的線程會一直暫停等待。

這樣的做法可以推廣到多個線程,對于需要暫停的線程都打上斷點即可,每個線程可以打多個,方便控制執行順序。對于不需要暫停的線程可以不打斷點,就像這里的main線程一樣。

 

3 Condition的使用

另外如果只想讓某個線程在斷點處停止,可以使用斷點的Condition,如上面的代碼中只想讓第一個線程暫停,則可以在斷點處右鍵,在Condition中填入Thread.currentThread().getName().equals(“Thread 1”);

idea以任意順序debug多線程程序的具體用法

到此這篇關于idea以任意順序debug多線程程序的文章就介紹到這了,更多相關idea多線程debug內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_41677899/article/details/119983851

延伸 · 閱讀

精彩推薦
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
主站蜘蛛池模板: 北条麻妃一区二区三区中文字幕 | 成人片免费视频 | 福利在线观看视频 | 国产伦精品一区二区三区四区视频 | 亚洲免费观看 | 狠狠操狠狠操 | 一级视频在线播放 | 日本中文字幕视频 | 欧美一区二区三区免费观看视频 | 91精品一久久香蕉国产线看观看新通道出现 | 国产精品网站在线观看 | 欧美狠狠 | 日韩精品无码一区二区三区 | 久久久久久这里只有精品 | 激情欧美一区二区三区中文字幕 | 国产视频1区 | 国精产品99永久一区一区 | 日韩精品一区二区三区在线观看视频网站 | 日本中文字幕一区 | 久草免费福利 | 国产精品18久久久 | 欧美成人福利 | 中文字幕日韩视频 | 中文字幕一区二区三区日韩精品 | 国产精品久久久久久久久久久久久久 | 国产成人欧美一区二区三区的 | 久久精品美女 | 亚洲视频精品在线观看 | 亚洲黄色在线视频 | 99re视频在线观看 | 国精产品一区二区三区有限公司 | 亚洲精品综合中文字幕 | 91精品国产综合久久久久久丝袜 | 国产精品美女久久久久久免费 | 精品亚洲一区二区 | 一区二区三区在线免费观看 | 在线看亚洲 | 欧美中文在线 | 久久久久久久久综合 | 精品国产乱码久久久久久牛牛 | 亚洲综合在线播放 |