激情久久久_欧美视频区_成人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與大數(shù)據(jù)進階 Java教程

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

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

 

1 debug 兩類 Supspend

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

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

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

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

  1. 正常執(zhí)行,執(zhí)行完的順序為 1, 2, 3, main
  2. 在斷點1處打斷點,設置為 All,在線程1觸發(fā)后所有線程均暫停,可以通過Resume繼續(xù)執(zhí)行下一個斷點,正常情況應該是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線程沒有暫停,會先執(zhí)行完。
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()+"斷點之間執(zhí)行");
            System.out.println(Thread.currentThread().getName()+"斷點2"); //斷點2       
        }
    }

 

2 按照順序執(zhí)行線程

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

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

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

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

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

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

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

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

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

 

3 Condition的使用

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

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

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

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

延伸 · 閱讀

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

    小米推送Java代碼

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

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

    Java使用SAX解析xml的示例

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

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

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

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

    程序猿DD9332021-10-08
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

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

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

    xml與Java對象的轉換詳解

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

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

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

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

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

    Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

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

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

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

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

    阿杜7482021-02-04
主站蜘蛛池模板: 欧美视频一级 | 日本不卡一二三区 | 免费视频www在线观看 | h视频免费在线观看 | 黄污网址 | 泰剧19禁啪啪无遮挡 | 毛片在线免费视频 | 中文字幕www | 久久久无码精品亚洲日韩按摩 | 欧美高清在线精品一区二区不卡 | 欧美日韩高清在线观看 | 一边吃奶一边摸下娇喘 | 一级成人欧美一区在线观看 | 国产精品av久久久久久久久久 | 97人操| 久久精品视频2 | 九色com| 日本黄色成人 | 久久久久久免费 | 91免费版在线 | 国产午夜三级一区二区三桃花影视 | 国产超碰人人爽人人做人人爱 | 亚洲精品日韩色噜噜久久五月 | 看个毛片| 日本羞羞影院 | 国产午夜精品一区二区三区四区 | 国产亚洲精品久久久久久网站 | 久久国产亚洲精品 | 成年免费观看视频 | 91aa.app| 午夜激情视频免费 | 在线免费小视频 | 国产资源在线观看 | 亚洲精品成人在线视频 | 久久久日韩精品一区二区三区 | julieann艳星激情办公室 | 亚洲特黄a级毛片在线播放 激情视频免费看 | 欧美精品一区二区久久 | 久久久久国产成人精品亚洲午夜 | 久久精品一区视频 | 黄色网址在线免费 |