Java并发编程实战读书笔记
Posted 郭梧悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发编程实战读书笔记相关的知识,希望对你有一定的参考价值。
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声明或者使用锁保护起来。
以上是关于Java并发编程实战读书笔记的主要内容,如果未能解决你的问题,请参考以下文章
Java并发编程实战读书笔记5 ---Executor在android中的应用
Java并发编程实战读书笔记5 ---Executor在android中的应用