java Synchronized使用
来源:互联网 发布:免费手机抢票软件 编辑:程序博客网 时间:2024/06/07 03:03
synchronized方法
synchronized void f() { }
synchronized void g(){ }
每个对象都有一个锁(也称监控器monitor),它是对象生来就有的东西(因此你不必为此写任何代码)。当你调用synchronized方法时,这个对象就被锁住了。在方法返回并且解锁之前,谁也不能调用同一个对象的其它synchronized方法。
线程在执行同步方法时是具有排它性的。当任意一个线程进入到一个对象的任意一个同步方法时,这个对象的所有同步方法都被锁定了,在此期间,其他任何线程都不能访问这个对象的任意一个同步方法,直到这个线程执行完它所调用的同步方法并从中退出,从而导致它释放了该对象的同步锁之后。在一个对象被某个线程锁定之后,其他线程是可以访问这个对象的所有非同步方法的。
如果你调用了f(),那么在f()返回并且解锁之前,你是不能调用同一个对象的g( )的。只要有实例就会相对有一个锁定,不是说因为某个实例的synchronized方法正在执行中,导致无法执行其他实例的synchronized方法。
synchronized方法和synchronized块,无论碰到return或是异常,都会解除锁定。
要调用synchronized实例方法的线程,一定要先获取this的锁定。一个实例的锁定,同一时间内只能有一个线程可以得到。
如果实例不同,那锁定也不同了。如果有多个相异实例,那多个线程仍然可以分别执行不同实例的synchronized方法。
使用synchronized块的时候,特别需要考虑“获取谁的锁定来保护”的情况。因为synchronized块需要明确的指出要获取的是哪个对象的锁定。例如:
synchronized (obj){
………….
}
synchronized void f() { }
synchronized void g(){ }
每个对象都有一个锁(也称监控器monitor),它是对象生来就有的东西(因此你不必为此写任何代码)。当你调用synchronized方法时,这个对象就被锁住了。在方法返回并且解锁之前,谁也不能调用同一个对象的其它synchronized方法。
线程在执行同步方法时是具有排它性的。当任意一个线程进入到一个对象的任意一个同步方法时,这个对象的所有同步方法都被锁定了,在此期间,其他任何线程都不能访问这个对象的任意一个同步方法,直到这个线程执行完它所调用的同步方法并从中退出,从而导致它释放了该对象的同步锁之后。在一个对象被某个线程锁定之后,其他线程是可以访问这个对象的所有非同步方法的。
如果你调用了f(),那么在f()返回并且解锁之前,你是不能调用同一个对象的g( )的。只要有实例就会相对有一个锁定,不是说因为某个实例的synchronized方法正在执行中,导致无法执行其他实例的synchronized方法。
synchronized方法和synchronized块,无论碰到return或是异常,都会解除锁定。
要调用synchronized实例方法的线程,一定要先获取this的锁定。一个实例的锁定,同一时间内只能有一个线程可以得到。
如果实例不同,那锁定也不同了。如果有多个相异实例,那多个线程仍然可以分别执行不同实例的synchronized方法。
使用synchronized块的时候,特别需要考虑“获取谁的锁定来保护”的情况。因为synchronized块需要明确的指出要获取的是哪个对象的锁定。例如:
synchronized (obj){
………….
}
0 0
- Java的synchronized使用
- java synchronized的使用
- java synchronized 使用
- java synchronized互斥锁使用
- Java基础-synchronized使用
- java-synchronized 嵌套使用
- java Synchronized使用
- Java synchronized的使用
- Java中synchronized的使用
- JAVA线程synchronized使用小结
- Java Synchronized关键字的使用
- Java的synchronized使用小结
- Java关键字synchronized使用总结
- java中的synchronized关键使用
- java同步Synchronized的使用
- java使用synchronized进行同步
- Java----使用线程(synchronized)
- Java多线程同步 synchronized使用
- EJB有状态与无状态的比较
- Fragment切换之间的生命周期
- Struts2工作原理
- Log4j学习总结-4
- Linux进程间通信——使用信号量
- java Synchronized使用
- Maven基础学习
- Unity3D的LightProbe动态光探头用法
- git的常用命令(一)
- js前端处理json对象,或者json的字符串
- Java学习笔记_003_流程控制
- Maven加载ojdbc14-10.2.0.4.0.jar文件
- Matlab数字图像处理基础【9】
- 如何面试测试人员