在java中,多线程一直是代表着高级
线程安全性
线程安全需要考虑操作的自己状态的原子性,竟态条件,复合操作
保证线程安全通过保证原子性,加锁
但要考虑这样做后程序的活跃性哥性能
内置锁(synchronized)
Java提供了一种内置的锁机制来支持原子性,同步代码块(synchronized block),每个java对象都可以用作同一个实现同步的锁。
对象的共享
如果无法保证数据的原子性,在多线程环境中可能导致失效数据(数据被别的线程修改)。
在java中,long类型和double类型不是线程安全的,因为它们在虚拟机中分为两个34位数据进行操作
类的逸出,当在类的构造器中有可被发现的状态,那么这个类可能逸出,因为它会在还没构造完成前被调用。
Final域不一定是线程安全的,因为它的对象可能是一个非线程安全的引用。
网友评论