您当前的位置: 首页 >  Java

郭梧悠

暂无认证

  • 1浏览

    0关注

    402博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java并发编程实战读书笔记(1)

郭梧悠 发布时间:2021-09-08 21:39:57 ,浏览量:1

1、无状态对象一定是线程安全的。因为无状态的对象不包含任何变量或者其他类的引用。

2、在某线程修改某变量的时候,需要通过某种方式,比如加锁,来防止其他线程使用该变量。

3、在java.util.concurrent包含了一些县城安全的对象,比如AtomicLong.在实际情况中,尽可能低使用现有的线程安全对象。避免重复造轮子。

4、每个java对象都有一个实现同步的锁,被称为内置锁,它是可以重入的,也就是说一个线程试图获取一个已经由他自己持有的锁,那么这个请求就会成功。关于重入锁,可以简单的阅读博主的Java线程拾遗(可重入锁),如果内置锁是不可重入的会发生什么现象呢?如果子类Child 重写了Parent的一个方法m(),并在该方法中调用super.m(),那么Child 的m()方法必然会发生死锁。

Class Child extends Parent{
  @Override
  public synchronized void m(){
     println("this is child m invoke").
     super.m();
  }
}

5、某线程在获取对象的锁之后,只能阻止其他线程获得同一个锁,但是并不能阻止其他线程访问该对象。

6、只有被多个线程同时访问的可变数据才需要通过锁来保护。

7、synchronized 的作用:实现原子性、确定临界区、确保内存可见性。内存可见性也就是说:某个线程修改了对象状态之后,其他线程能够看到发生的状态变化。也就是说加锁的含义不仅仅局限于互斥行为,为了确保所有线程都能看到共享变量的最新值,所有执行读或者写操作的线程都必须在同一个锁上同步。

8、在多线程中使用共享且可变的long或者double等类型的变量也是不安全的,除非用volatile声明或者使用锁保护起来。

关注
打赏
1663674776
查看更多评论
立即登录/注册

微信扫码登录

0.0374s