synchronized修饰的代码块同步执行,不在synchronized块中的代码会异步执行,因此推荐用同步代码块,而非同步整个方法。
synchronized修饰同步方法和代码块,一定是排队运行的(线程独占)。
多线程访问“共享变量”,才需要加同步。
同步不能继承。
当一个线程执行的代码出现异常,其持有的锁会自动释放。
synchronized加到static方法上是给Class类上锁。
synchronized加到实例方法上,是给对象上锁。
String常量池缓存,synchronized代码块加锁一般不使用String。
synchronized代码块具有volatile同步变量到主内存的功能。
wait()和notify()都是在同步方法、代码块中使用。
执行notify()后不会立即释放对象锁,等执行完synchronized代码块才释放,然后其他wait状态的线程才可以获得该对象锁。
线程间通信,可使用管道字节流、管道字符流;建立通信的管道两端,都是阻塞的,即写端无写入时,读端将会阻塞。类似于
Linux进程通信的pipe。
PipeInputStream/PipeOutputStream
PipeReader/PipeWriterReentrantReadWriteLock 具有读和写两个锁;读读共享锁、写写排他锁、读写排他锁(有写 就互斥)。
《Java并发程编程艺术》重点总结
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- layout: posttitle: 《Java并发编程的艺术》笔记categories: Javaexcerpt...
- 第三章 Java内存模型 3.1 Java内存模型的基础 通信在共享内存的模型里,通过写-读内存中的公共状态进行隐...