第二章:多线程---对象和变量的并发访问

  1. 线程不安全问题存在于“实例变量”中, 如果是方法内部的私有变量,则不存在线程不安全的问题。
    因为方法内部的变量是私有的,它是随着线程的创建而创建的。

  2. 关键字synchronized取得的锁都是对象锁,而不是把一段代码或者是方法当做锁。所以哪个线程先执行带
    synchronized关键字的方法,哪个线程就持有该对象的Lock,其他线程只能等待状态。对于非同步的方法,其他
    线程仍然可以访问。这TM说的就不好理解了。

  3. 关键字synchronized不仅可以解决设置值时候的线程安全问题。还可以解决脏读的问题,把读的方法也加上
    关键字synchronized。 比如:A线程获取了关键字synchronized的X方法,别人就进不去了, 但是B线程如果调用
    了关键字synchronized的非X方法,也必须等A线程将X方法执行完。
    脏读一定会出现操作实例变量的情况下,不同线程争抢实例变量的结果。

  4. 可重入锁:自己可以再次获取自己自的内部锁。如果不可重入锁的话,就会造成死锁。
    可重入锁也支持在父子中继承。

  5. 出现异常,锁自动释放:当一个线程出现异常时, 其持有的锁会自动释放。

  6. 同步关键字synchronized是不具备 继承性的。也就是说父类的某个方法用了关键字, 子类不加的话
    多线程环境下是没法保证线程安全的。

  7. 用关键字synchronized的最大弊端:效率低下!

  8. 锁非this对象具有一定优点:如果在一个类中有很多个synchronize方法,这时虽然能实现同步,但会受到
    阻塞,所以影响运行效率;但如果使用同步代码块锁非this对象,则synchronized(非this)代码块中的程序
    与同步方法时异步的,不与其他锁this同步方法争抢this锁,则可以大大提高效率。

  9. synchronized加在static方法上是给Class上锁, 而synchronized加在非static静态方法上是给对象上锁。
    证明:一个类中A,B两个方法是类锁,那么AB的执行时有先后顺序的,同步的。而C方法时对象锁,所以与
    A,B方法不同步。
    同步synchronized(xxx.class) 的作用其实和synchronized static 方法的作用是一样的。都是Class锁。

  10. String 类型作为常量池时因为JVM的常量池特性,可能会造成一条线程永远执行,一条线程永远不能执行。
    同步代码块都不使用String作为锁对象。

  11. 同步synchronized方法无限等待与解决 —> 使用同步代码块,用不同的锁来解决。

  12. java的多线程死锁是一个经典的多线程问题,不同的线程在等待不可能释放的锁。

  13. 内置类和静态内置类的同步就不整了吧。

  14. volatile关键字的主要作用是使变量在多个线程间可见。 volatile的作用是强制从公共堆中取得变量的值。

  15. volatile和 synchronized比较
    a, volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,但是volatile只能用于修饰
    变量,不能修饰方法我代码块。
    b, 多线程访问volatile时不会发生阻塞
    c, volatile能够保证数据的可见性,但不能保证原子性。synchronized可以。

  16. synchronized可以使多线程访问同一个资源具有同步性,而且它还具有将线程工作内存中的私有变量与
    公共内存中的变量同步的功能。

    关键字synchronized可以保证在同一时刻,只有一个线程可以执行某一个方法或者一个代码块。它包含两个
    特征:互斥性和可见性。 同步synchronized不仅可以解决一个线程看到对象处于不一致状态, 还可以保证进入
    同步方法或者代码块的每个线程,都可以看到由同一个锁保护之前的所有修改效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值