多线程共享对象

可见性:

锁不仅仅是关于同步和互斥,也是关于内存可见的,为了保证线程能看到共享,变量的最新值,读取和写入线程都必须使用公共的锁进行同步

volatile变量:它确保对一个变量的更新和可预见的方式告诉其他线程,被声明的变量在运行时会被监视,它是共享的,所以读取一个volatile类型的变量,会返回某个线程写入的最新值.访问这个变量不会加锁,不会引起阻塞

只又当volatile变量能够简化实现和同步策略验证是才使用它,比如他所应用的对象状态的可见性,或者标识重要的生命周期事件

加锁可以保证可见性和原子性,volatile变量只能保证可见性

volatile满足什么条件才能使用?
写入变量时不依赖变量的当前值,或者确保只有单一的线程修改变量的值
变量不需要与其他的状态变量共同参与不变约束
而且访问变量时,没有其他的原因需要加锁

如果有变量需要全局共享,则可用用ThreadLocal类型保证线程安全。

不可变的对象永远都是线程安全的。
变量创建后不会被修改,所有域都是final类型的并且创建期间没有发生this引用的逸出

Hasttable,synchronizedMap,ConcurrentMap从MAP获取任意线程
vectorCopyOnWriteArrayList,CopyOnWriteArraySet,SynchronizedList,SyschronizedSet可以从容器中获取他的任意线程
BlockingQueue或者ConcurrentLinkedQueue可以从队列安全发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值