多线程-单例下线程安全验证

来源:互联网 发布:女装淘宝店铺起名字 编辑:程序博客网 时间:2024/06/08 08:13

简单使用一个单例验证是否线程安全。

/** * @author lijizhen1@jd.com * @date 2017/11/30 17:49 */public class SimpleSingle {    private static SimpleSingle aaaa = null;    private SimpleSingle() {    }    public synchronized static SimpleSingle getInstance() {        while (null == aaaa) {            aaaa = new SimpleSingle();        }        return aaaa;    }    public String init(String i) {        return i + 1;    }    public static void main(String[] args) throws InterruptedException {        SimpleSingle bbb = SimpleSingle.getInstance();        //这里使用ConcurrentHashSet可以保证线程安全       #Set<String> set = new ConcurrentHashSet<String>();       //不能保证线程安全。多个线程共享一个set数据       Set<String> set = new HashSet<String>();        int i = 0;        while (i < 100) {            new Thread(new Runnable() {                @Override                public void run() {                    set.add(bbb.init(UUID.randomUUID().toString()));                }            }).start();            i++;        }        Thread.sleep(1500);        System.out.println(set.size());    }}

测试结果是单例下线程共享的数据一定要保证线程安全,尤其是在多个线程下使用同一个共享的变量时候要考虑线程安全的问题

原创粉丝点击