JAVA 多现程编程核心技术读书笔记

第1章 java多线程技能

页码12: synchronized 可以在任意对象及方法上加锁,而加锁的这段代码称为“互斥区”或“临界区”;

页码19:线程处于正在运行或准备开始运行的状态,就认为线程是“存活”的;

页码20:方法sleep()的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。这个“正在执行的线程”是指this.currentThread()返回的线程。

页码38:suspend与resume方法的缺点----独占和不同步;

页码43:在java中,线程的优先级具有继承性,比如A线程启动B线程,则B线程的优先级与A一样。

第2章 对象及变量的并发访问

页码54:方法中的变量不存在非线程安全问题,永远都是线程安全的。这是方法内部的变量私有的特性造成的;

页码57:在两个线程访问同一个对象中的同步方法时,一定是线程安全的;

页码59:关键字synchronized取得的锁都是对象锁;

页码61:只有共享资源的读写访问才需要同步化,如果不是共享资源,那么根本没有同步的必要(个人觉得这也是synchronized同步代码块存在的必要性);

页码67:当存在父子类继承关系时,子类是完全可以通过“可重入锁”调用父类的同步方法的;

页码69:同步不具有继承性;

页码71:synchronized方法是对当前对象进行加锁,而synchronized代码块是对某一个对象进行加锁;

页码97:synchronized关键字加到static静态方法上是给Class类上锁,而synchronized加到非静态方法上是给对象上锁;

页码99:异步的原因是持有不同的锁,一个是对象锁,另外一个是Class锁;

页码102:在JVM中具有String常量池缓存的功能;

页码104:同步synchronized代码块都不使用String作为锁对象;

页码109:只要互相等待对方释放锁就有可能出现死锁;

页码117:只要对象不变,即使对象的属性被改变,运行的结果还是同步的;’

页码120:关键字Volatile的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值;

页码123:关键字volatile解决的是变量在多个线程之间的可见性;而synchronized关键字解决的是多个线程之间访问资源的同步性;

页码123:线程安全包含原子性和可见性两个方面,java的同步机制都是围绕这两个方面来确保线程安全的;

页码124:volatile本身并不处理数据的原子性,而是强制对数据的读写及时影响到主内存;

页码127:原子类也并不完全安全;

页码128:出现这样的情况是因为addAndGet()方法是原子的,但方法和方法之间的调用却不是原子的,解决这样的问题必须要用同步;

页码131:得到这个结果是各线程间的数据没有可视性造成的,而关键字synchronized可以具有可视性。

页码132:synchronized可以保证进入同步方法或者同步代码块的每个线程,都看到由同一个锁保护之前所有的修改效果。

页码132:学习多线程并发,要着重“外练互斥,内修可见”,这是掌握多线程,学习多线程并发的重要技术点。(与页码123的理念是相通的)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值