idea 同步代码块在debug模式下失效

案例:线程安全的集合

package test;

import java.util.ArrayList;
import java.util.List;

//线程安全的集合
public class UnsafeList {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < 5000; i++) {
            new Thread(() -> {
                synchronized (list) {
                    list.add(Thread.currentThread().getName());
                }
            }).start();
        }

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(list.size());

    }
}

不知道同步代码块为什么失效?造成原因:debug模式启动

debug:1715

在这里插入图片描述
run: 5000

在这里插入图片描述

debug模式和run模式运行结果不同

如果代码不做干预,多线程的执行结果是不稳定的。
debug模式因为idea会不断的抓取内存快照,会在一定程度上影响线程的调度,从而导致结果和普通模式有较明显的区别。

posted @ 2020-05-11 00:32  我有满天星辰  阅读(41)  评论(0编辑  收藏  举报