java中线程同步

来源:互联网 发布:unity3d 动态生成模型 编辑:程序博客网 时间:2024/05/16 19:34

在大多数多线程应用中,经常有两个或两个以上的线程对同一数据存取。从而出现竞争条件。

一、三种机制防止并发代码访问干扰

1、synchronized关键字

java从1.0开始,java中的每个对象都有一个内部锁。如果一个方法用了synchronized,那么要调用这个方法,线程须获得内部的对象锁。

public synchronized void method() {      your code}
等价于

public void method() {       this.intrinsicLock.lock();       try {           your code       }finally {            this.intrinsicLock.unlock();       }}

2、ReentrantLock类(即Lock锁)

Lock myLock = new ReentrantLock();
//注:以下部分可放入目标方法内部使用myLock.lock();try {   临界区} finally {   myLock.unlock();}
这一结构确保任何时刻只有一个线程进入临界区。

一旦一个线程获得了锁对象,其它线程都无法通过lock()语句。

当其它线程调用lock时,它们被阻塞,直到第一个线程释放锁对象。


3、java.util.concurrent包机制

0 0
原创粉丝点击