eclipse debug 多線程

之前用到過許多線程開發,對多線程開發也算是小有點心得,但一開始多線程開發的時候,碰到不少壁。但總得來講,有個好的工具老是能事半功倍。我用的工具是eclipse,在開發多線程時,其debug模式是能直接模擬多線程環境的,網上也有許多資料,但大多都不是很全。但願我可以將本身的一些心得記錄下來,但願能幫助到還爲多線程開發而糾結的朋友。html

先寫個簡單的多線程測試用例:java

package com.wxw.debug;安全

     

public class TestMain extends Thread {多線程

     

    @Overrideeclipse

    public void run() {ide

        System.out.println("hello world");工具

    }測試

        

    public static void main(String[] args) {.net

        TestMain t1 = new TestMain();線程

        TestMain t2 = new TestMain();

        t1.start();

        t2.start();

    }

}

這段代碼,控制檯打印出兩行

Hello world

接下來,將示範怎麼樣使用debug模式進行一步步的執行,後面將逐步對知識進行應用擴展

  1. 斷點的位置

這裏有個點須要注意,斷點的位置必定要正確,run方法或者run之後調用的方法裏,不然的話,程序跑完了,debug模式裏也只有一個主線程在跑,好了,直接看結果。

在這裏咱們看到了兩個線程已經起來了,在debug模式裏也註明了Thread-0和Thread-1,在這裏我再加段代碼來更明顯的顯示哪一個線程執行到了這裏。

加上這段代碼後,打印出來的結果就是

Thread-0 hello world

Thread-1 hello world

如今我須要將Thread-1這個線程先打印出來結果,也就是將線程可控,我想先執行哪一個都行,怎麼辦了?爲了更加明顯,我多加幾個線程,總共5個線程,按前後順序打印出來,我是語言表達困難戶,直接看圖,圖爲動態,有點大,請耐心等待

我想這個動態應該不用多解釋,也許有人會問這有什麼用,這個用處可大了,咱們能夠控制哪一個線程開始運行,哪一個線程運行到某個點後,程序暫停在那裏,而後其餘程序再運行。最典型的例子就是單例模式在多線程下是否絕對安全(是否必定是單例),這裏我也演示一下,線程不安全的單例模式代碼,摘自:http://www.blogjava.net/kenzhh/archive/2013/03/15/357824.html

public class Singleton {

    private static Singleton instance;

   

    private Singleton() {

    }

   

    public static Singleton getInstance() {

        if (instance == null) {

            System.out.println(instance);

            instance = new Singleton();

        }

        return instance;

    }

}

是不是單例,打印出引用地址就能夠了,測試環境用兩個線程打印

正常狀況下,應該打印出來兩個一樣的值,先直接run,不用debug模式,結果以下:

這通常狀況下,是表現的單例,在大多數狀況下,你有可能測試不少次的結果依然如此,但這段代碼確實在多線程狀況下會出問題,怎麼才能重現這個問題了,下面直接用圖演示:

最後的結果:

  com.wxw.debug.Singleton@1fc0f04

com.wxw.debug.Singleton@13ded59

這裏能夠看出,兩個結果不同,證實不是同一個對象。問題就這樣重現,是否是以爲這個工具頗有用啊。

這篇文章不是講單例模式,舉的是一個典型的例子,主要講用debug模式解決多線程狀況下的問題。我想,用debug模式,不單單用來解決問題,還能幫助咱們理解一些知識點,這才達到了邊用邊學的好處。

相關文章
相關標籤/搜索