多线程的特性
原子性、可见性、有序性
原子性
即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
解决方案:
一般使用 synchronized 或者 Lock 这种加锁的方式解决多线程原子性问题。当另一个线程需要获取主内存中的某个变量去进行操作的时候,必须先获取锁,否知就需要等待其他线程将锁释放,再获取到锁之后再进行操作。这种情况就保证了另一个线程的操作已经完成,那么对于那一个线程而言,他的操作就是原子性的操作,在他操作期间,不会有其他线程对他加锁的数据进行更改。
可见性
当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
解决方案:
一般使用 volatile 解决多线程的可见性问题。 volatile 修饰的变量进行改变之后,将直接修改主内存而不是这个线程所的工作内存,并且通知其他工作内存该变量失效,逼迫其他内存也只能从主内存中获取这个变量。从而实现更新对其他线程可见。
有序性
程序执行的顺序按照代码的先后顺序执行。
网友评论