0%

线程安全

线程安全

出现线程安全,可以如下理解:

在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存),进程内的所有线程都可以访问到该区域,当第一个线程已经访问,未来得及输出的时,下一个线程在这段时间的空隙获得这个值,故输出是会输出一个相同的值。

考虑线程安全问题,就需要先考虑Java并发的三大基本特性:原子性、可见性以及有序性。

原子性是指一个操作中cpu不可以在中途暂停然后再调度,即不被中断操作,要不全部执行完成,要不都不执行。

可见性是指但多个线程访问同一个变量是,一个线程修改了这个变量的值,其他线程能够立即看到修改的值。

有序性是指程序的执行顺序按照代码的先后顺序执行。

如何保证线程安全

解决办法:多线程之间使用关键字synchronized、或者使用锁(lock),或者volatile关键字。

①synchronized(自动锁,锁的创建和释放都是自动的)

②lock手动锁(手动指定锁的创建和释放)

③volatile关键字,如果发生数据冲突问题(线程)