线程LOCK机制和synchronized线程同步
来源:互联网 发布:plc伺服编程实例 编辑:程序博客网 时间:2024/05/22 02:10
1. 线程同步有机制会遇到如下情况:在服务器被每个客户端请求时,涉及到大量的线程使用,使得每个客户端在请求时得到服务器端的响应。当存在资源共享时,我们需要使用锁机制让共享资源处于临界区,避免多个线程处于争夺状态。如果一个资源是多个线程共享的,为了保证数据的完整性,在进行事务性操作时需要将共享资源锁定,这样可以保证只有一个线程能对资源进行操作,从而保证了数据的完整性.在J2SE5.0以前锁定的功能是由synchronized关键字来实现的. J2SE 5.0后新特性实现锁定,包括一般的锁、读写锁等.关键技术剖析:
1.1 synchronized关键字关键字synchronized修饰某个对象后,该对象就成为监视器(monitor)。每个对象都可以作为一个监视器,这个监视器用来保证在任一时刻,只能有一个线程访问该对象,使得线程在临界区同步起来,此时避免了可能引起的冲突。Synchronized有如下三种用法:
(1)synchronized代码块:监视器就是指定的对象。
(2)synchronized方法:监视器就是this对象。
(3)synchronized静态方法:监视器就是相应的类。
2 Lock机制在J2SE5.0中的锁是由java.util.concurrent.locks .lock实现的,使用它的关键技术点如下:
(1)ReentrantLock类实现了Lock接口,通过它可以完全取代synchronized关键字.
(2)ReentrantLock的lock方法取得锁,如果该锁定没有被其他线程占据,则获取该锁定并返回,将保持计数器置为1;如果当前线程已经占据锁,则立即返回,将保持计数器加1;如果锁定被其他线程占据,则当前线程进入睡眠状态,等待其他线程释放锁,此时保持计数器置为1.
(3)ReentrantLock的unlock方法释放锁,如果当前线程是锁的占有者,则将保持计数器减1,如果保持计数器等于0,则释放锁.如果当前线程不是锁的占有者,则抛出异常.
(4)ReadWriteLock是一个继承Lock的接口,定义了读写锁.它的一个实现类是ReentrantReadWriteLock
(5)ReentrantReadWriteLock的writeLock方法获得用于写入操作的锁定,当获得写入锁时,其他线程想进行读写操作都必须等待.
(6)ReentrantReadWriteLock的readLock方法获得用于读操作的锁定,当获得读取锁时,其他读的线程可以继续获得读取锁,但是不能获得写入锁。
3.线程死锁notify()或notifyAll()来源于Object,用来唤醒线程,是对应synchronized的,避免线程死锁。程序员在编程过程中考虑“死锁”的潜在危险,同时程序员时刻记住,当共享资源使用结束时一定要记得在finally块使用unlock解锁。
- 线程LOCK机制和synchronized线程同步
- 线程同步:synchronized和Lock
- 线程同步和通信synchronized和lock
- 同步——synchronized机制、Lock和Conditon机制和关于线程中断
- 线程同步—synchronized & Lock
- java并发编程:线程安全-线程同步-synchronized和lock
- 线程同步机制synchronized
- 多线程拨号Java版(探讨synchronized和Lock线程同步)
- java线程之线程同步与线程通信(Synchronized/Lock)
- Java线程同步synchronized,Lock,Condition
- java线程同步synchronized与lock
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 用Admob的Ad Network Mediation比用Adwhirl的收入多
- 《编程之美》2.20 程序理解和时间分析(读别人的程序)
- 一些关于JS特效的例子
- how set java en
- 判断点P在三角形内还是外
- 线程LOCK机制和synchronized线程同步
- C语言遍历目录
- C语言文件操作函数大全
- 点击超链接调用javascript函数
- USACO 3.4 A Game
- havlenapetr-FFMpeg移植到android2.3
- DXF图元文件提取与显示(三)-Circle
- HTC Desire(G7) 刷机到 android4.0
- DXFTest