今天看书时遇到了一些同步的代码,发现synchronized掌握得不好,回头看看并在这里写出来复习一下:
当两个或者多个线程需要访问共享的资源时,需要确保每次只有一个线程使用资源,实现这一目的的过程叫同步。Java实现同步的关键是监视器的概念,监视器是用作互斥锁的对象。在给定时刻,只有一个线程可以拥有监视器。有两种方法创建同步代码,都需要使用synchronized关键字:
1、同步方法
用synchronized关键字修饰的方法为同步方法。当某个线程进入同步方法中时,调用同一实例的该同步方法(或任何其他同步方法)的所有其他线程都必须等待。为了退出监视器将对象的控制权交给下一个等待线程,监视器的拥有者只从同步方法中返回。
2、synchronized语句
一般形式如下:
synchronized(objRef){
//statements to be synchronized
}
objRef是对被同步对象的引用。synchronized语句块确保对objRef对象的成员方法的调用,只会在当前线程成功进入objRef的监视器之后发生。