第一章 简介

(1)下面是一段非线程安全的数值序列生成器代码:

public class UnsafeSequence{

    private int value;

    public void getNext(){

        return value++;

    }

}

如果执行时机不对,那么在两个线程调用getNext时会得到相同的值;因为value++看似是一个单独的操作,单事实上它包含三个独立的操作:读取value,将value+1,并将结果写入value;由于运行时可能有多个线程的操作交替执行,因此这两个线程可能同时执行读操作,从而使他们得到相同的值,并同时+1,结果就是,在不同的线程调用中返回了相同的值;

2.将getNext方法设置为synchronized即可修复线程不安全的错误;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容