java多线程零碎知识点
来源:互联网 发布:挪威的森林知乎 编辑:程序博客网 时间:2024/05/29 03:17
相比于ReetrantLock,使用synchronized来编写代码要简洁的多,之所以能使用synchronized,是因为每个对象都有一个内部锁,并且该锁有一个内部条件。由锁来管理那些试图进入synchronized方法的线程,由条件来管理那些调用wait的线程
将静态方法声明为synchronized也是允许的,如此则会获得特定类的内部锁,如一个类Person,当该方法被调用时,该方法将会获得Person.class上的锁,并且,没有其他线程可以调用Person类的其他同步静态方法
tryLock()方法试图申请一个锁,申请成功返回true,否则返回false,并且线程可以立即离开去做其他事
if(myLock.tryLock()){ try{...} finally{ myLock.unlock(); }}else{}
- lock()方法不能被中断,但是带有超时参数的tryLock方法可以被中断,并且抛出InterruptedException. lockInterruptibly()方法,相当于一个超时设为无限长的方法,它可以被中断。
- 使用await方法是自己进入等待的线程,如果被打断,也会抛出InterruptedException,awaitUnInterruptibly()方法将不会被打断
- ReentrantReadWriteLock可重入读写锁,如果在很多线程并发读而较少线程并发写的情况下,是十分有用的。
private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock ();private Lock readLock = rwl.readLock();private Lock writeLock = rwl.writeLock();
然后,对所有的读方法加读锁,对所有的写方法加写锁。
java.util.concurrent.locks.ReentrantReadWriteLock
- Lock readLock()
得到一个可以被多个读操作共用的读锁,但会排斥所有写操作 - Lock writeLock()
得到一个写锁,排斥其他的读操作和写操作 - 如果在多线程环境中使用阻塞队列,应该使用put和take方法添加和移除元素,因为这两个方法在遇到队列满或队列空的情况下,会阻塞。并且,一定要使用offer、poll、peek方法替代add、remove、和element方法,因为后者会抛出异常,而前者则返回null
0 0
- java多线程零碎知识点
- java多线程中一些零碎知识点
- 多线程 知识点(零碎)
- Java面试零碎知识点
- java零碎知识点整理
- java零碎知识点
- Java 零碎知识点
- JAVA零碎知识点
- JAVA-零碎知识点
- java零碎知识点整理
- java零碎知识点
- java中零碎知识点总结
- Java&Android零碎的知识点
- Java零碎知识点(二)
- 零碎知识点
- 零碎知识点
- 零碎知识点
- 零碎知识点
- 就是得还不够
- Hadoop之Map-Reduce
- 查看那个进程占用了80端口
- java中使用字符串或者动态创建对象的三种方法(Class,Constructor,Proxy)
- 读书笔记-C++PrimerPlus-8.2.6 对象、继承和引用10.2.5 修改实现
- java多线程零碎知识点
- UVa 10361 Automatic Poetry
- STL之map操作的几点疑惑
- git学习之旅(四)——回退版本
- 线段树之区间更新
- 机房收费系统之优化一
- 安装Win7操作系统注意事项
- Uber是怎么入侵打车软件市场的
- POJ 2513 Colored Sticks(欧拉回路+字典树+并查集)