在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  Linux/ IDEA進行java多線程調試時,有20個線程,斷點只對幾個線程起作用怎么回事?

IDEA進行java多線程調試時,有20個線程,斷點只對幾個線程起作用怎么回事?

下面的java多線程程序中,設置斷點的地方調試的時候只能斷兩三次,也就是斷點只對這兩三個線程起作用,怎么回事?

        public static void main(String[] args) {
            ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
            HashSet<String> s = new HashSet<>();
            List<Integer> l = new ArrayList<>();
            final String id = "x12323";
            final String className = s.getClass().toString();
            for(int j = 0; j<20; j++) {
                fixedThreadPool.execute(() -> {
                    System.out.println("運行線程: " + Thread.currentThread().getName());
                    String lockObj = className + id;
                    synchronized (lockObj) {    // 這里設置斷點
                        if (s.isEmpty()) {
回答
編輯回答
六扇門

你斷點在獲取鎖的位置,斷點DEBUG的時候暫停的是當前線程,其他線程不阻礙。
因此,其他線程會優(yōu)先獲取鎖并完成代碼執(zhí)行,所以會造成只有2-3個線程被斷點DEBUG的錯覺。

建議:

  1. synchronized代碼塊內斷點。
  2. 使用System.out.println進行執(zhí)行輸出。CurrentThread
2018年5月16日 04:57
編輯回答
不舍棄

你是根據控制臺輸出來確定當前線程嗎?

要看這個的:

clipboard.png

因為多線程下,可能線程1 執(zhí)行到 Sysout,但是下一次就是線程2在訪問 synchweqronized 了。

2017年11月30日 17:11