Java Concurrency in Practice :基础知识(正确的同步 -- 客户端加锁)
2016-11-24 21:06
465 查看
正确的同步 -- 客户端加锁
1、错误的示范
public class ListHepler<E>{ public List<E> list = Collections.synchronizedList(new ArrayList<E>); public synchronized boolean putIfAbsent(E x){ boolean absent = !list.contains(x); if(absent) list.add(x); return absent; } } }
2、正确的例子
public class ListHepler<E>{ public List<E> list = Collections.synchronizedList(new ArrayList<E>); public boolean putIfAbsent(E x){ synchronized(list){ boolean absent = !list.contains(x); if(absent) list.add(x); return absent; } } }
3、有啥区别?
第一段程序中synchronized加在了putIfAbsent方法上,同步的是对象x而第二段程序中synchronized加在了putIfAbsent方法里,同步的是队列List
相关文章推荐
- Java Concurrency in Practice :基础知识(正确的同步 - 组合)
- Java Concurrency in Practice :基础知识(重排序与可见性)
- Java Concurrency in Practice :基础知识(线程同步)
- [Java Concurrency in Practice]第五章 基础构建模块
- Java并发编程学习——《Java Concurrency in Practice》学习笔记 5.基础构建模块
- [Java Concurrency in Practice]第十四章 构建自定义的同步工具
- [Java Concurrency in Practice]第十五章 原子变量与非阻塞同步机制
- Java Concurrency In Practice
- 《Java Concurrency in Practice》 学习笔记--第二章:线程安全
- java基础知识11(TCP客户端并发登陆
- java 并发编程实践( java concurrency in practice )
- java concurrency in practice - 2
- (新手)java多线程基础知识——调度与同步
- Java concurrency in practice 读书笔记---synchronizer同步工具类
- Java Concurrency In Practice Notes
- Java Concurrency in Practice 读书笔记 第十章
- Understand <Java Concurrency in Practice>
- 《Java Concurrency in Practice》ch5 Building Blocks
- Java Concurrency in Practice
- 《Java Concurrency in Practice》 学习笔记--第一章:引言