您的位置:首页 > 其它

线程的同步

2015-01-02 20:03 162 查看
synchronized(obj){...}

这就是同步代码块。其中的obj就是同步监视器。obj的目的就是为了阻止两条线程对同一共享资源的访问,所以一般使用可能被并发访问的共享资源作为同步监视器。

同步代码块可以理解为一个加锁--修改完成--释放锁的过程。在其中一个线程修改共享资源的过程中,其他线程是无法访问该共享资源的

2.除了同步代码块,还有同步方法,所谓的同步方法其实就是在普通方法前面加synchronized就可以了,而其执行的过程和原理和同步代码块也是一样的。

3.当然,有锁定同步监视器,也有解锁同步监视器。下面的情况可以对其进行解锁:

(1)同步方法,同步代码块结束了,线程就会释放监视器。

(2)当遇到break,return

(3)代码块,方法中出现了未处理的Error或Exception

(4)程序执行了同步监视器对象的wait()方法

但是当程序调用sleep(),yield()时并不会释放同步监视器

4.同步锁Lock

Lock是J***A提供的另一个同步机制,使用方法也相当的简单。

private final ReentrantLock lock=new ReentrantLock();

lock.Lock()

{共享资源块,也就是前面的同步代码块或同步方法中的内容}

finally{lock.unlock();}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: