1、synchronized锁的是堆里的对象,不是代码块;
如果指向的对象被替换了,那新对象锁就不存在了,其他线程就可以获得这个新对象的锁;
不要用常量作为锁的对象;
2、synchronized成员方法锁的是this对象
3、synchronized静态方法锁的是类的class对象(T.class)
4、synchronized获得的锁是可重入的
5、子类的synchronized方法调用父类的synchronized方法,也是可重入的
6、线程出现异常后,会释放synchronized锁
7、volatile可见性,当volatile声明的变量对应的内存被其他线程更新后,会通知CPU告诉它这块内存的值被更新了,需要重新读到CPU的缓存中计算
8、volatile只保证可见性,而synchronized既保证可见性并且保证原子性
9、AtomXXX类通过底层原子性设计,效率非常高,AtomXXX方法单一执行是原子性的,如果结合两个方法以上,一起就不是原子性了
10、synchronized代码块的语句越少,锁的粒度越小,效率越高
11、锁对象的wait、notify、notifyAll方法必须在synchronized代码块里执行;wait方法会让线程A阻塞,等待notify/notifyAll通知,当收到通知才会继续执行线程剩余的代码,但是执行剩余代码需要获得锁,所以其他线程B调用notify/notifyAll的时候,需要调用wait方法让出锁;A执行完代码之前,需要调用notify/notifyAll方法,通知B继续执行,A执行完代码,线程退出
12、CountDownLatch门闩,指定门上有几把钥匙,每次调用countDown都会开一把锁,当锁的数量为0的时候,调用了await的线程就会开门(开始执行)
《Java高并发》线程同步基础1
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
- layout: posttitle: 《Java并发编程的艺术》笔记categories: Javaexcerpt...