当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。
访问共享的,可变的数据,要求同步,为了保证变量元素的可见性,可以采用如下方法:
① 线程封闭 最简单的方式就是不共享数据,如果数据仅在单线程中访问,就不需要任何同步。线程封闭技术是实现线程安全的最简单的方式,当对象封闭在一个线程中,这种做法会自动成为线程安全的,即使被封闭的对象本身并不是。
② 栈限制 将变量限制在方法中。
③ ThreadLocal 它允许将变量和线程关联在一起,使得每个线程都有一份单独的拷贝。
④ 不可变性 不可变对象永远是线程安全的,一个对象是不可变的饿,要求它的状态创建后不会改变,所有域都是final类型,并且,它被正确创建。
|
|