synchronized

Synchronized
        如果不希望被打断,就用synchronized的括起来。

注意:
(1)Synchronized 一定使用在一个方法中。
(2)锁标记是对象的概念,加锁是对对象加锁,目的是在线程之间进行协调。
(3)当用Synchronized 修饰某个方法的时候,表示该方法都对当前对象加锁。
(4)给方法加Synchronized 和用Synchronized 修饰对象的效果是一致的。
(5)一个线程可以拿到多个锁标记,一个对象最多只能将monitor 给一个线程。
(6)不能加synchronized:

         构造方法:对象都没有 当然不能加synchronized

         抽象方法:

         因为同步的方法持有的锁,是this,
         而抽象类不能被实例化,也就不存在这个抽象类的对象this。

         但抽象类的抽象方法必须在其子类被实现,
         而子类(此子类不是抽象类)可以将这个在父类定义的抽象方法声明为同步的, 
         这也正好符合 抽象方法 把具体实现放到子类来实现的思想。
(7)一般方法和静态方法可以加synchronized同步。
(8)Synchronized 是以牺牲程序运行的效率为代价的,因此应该尽量控制互斥代码块的范围。
(9)方法的Synchronized 特性本身不会被继承,只能覆盖。

通过Synchronized,可知Vector 较ArrayList 方法的区别就是Vector 所有的方法都有
Synchronized。所以Vector 更为安全。
同样:Hashtable 较HashMap 也是如此。

StringBuffer vs StringBuilder
StringBuffer:线程安全
StringBuilder:非线程安全

ArrayList:非线程安全
Vector:线程安全(方法全是同步的)
如果想ArrayList也同步:
就要使用:java.util.Collections工具类
copy()集合拷贝
reverse()集合翻转
sort()结合比较器排序
synchronizedXXX() 可以完成同步

List list = new ArrayList();
list = Collections.synchronizedList( list );
//些时list变为了(外)同步的list了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值