线程的同步
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();}
这就是同步代码块。其中的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();}
相关文章推荐
- 线程 进程 同步 通信
- 线程的同步 wait和notify
- 11.5线程----同步装置之CountDownLatch
- 线程中的同步和异步
- 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别
- Qt中利用QThread在线程中同步使用QFtp
- 线程的同步:采用同步代码块实现同步
- iOS两个线程间嵌套发送同步消息
- 委托,线程,同步,异步的学习(一)
- C语言如何在线程间实现同步和互斥
- 最近的一个作业(用c++模拟线程的同步和互斥)
- Java 线程通信的安全问题(同步)
- Python多线程学习(二、线程的同步)
- 线程之同步
- 定时器与线程的同步-(sync between timer and thead)
- 从零学习JAVA多线程(三):线程的同步问题
- java线程同步,必须知道的
- 同步线程锁 死锁
- Linux 多线程编程----线程见同步问题
- java线程简介(同步详细信息)