Java中synchronized关键字的简单理解
2014-06-07 20:06
567 查看
在多线程的程序中,往往需要进行同步、互斥控制,Java提供了synchronized关键字来实现简单的同步互斥操作。synchronized关键字可以用作方法(实例方法和静态方法)的修饰符,可以作为方法内部的语句,即synchronized方法和synchronized语句块。synchronizced关键字可以保证某一时刻一个对象最多只能有一个synchronized方法在执行。
使用synchronized关键字时,要先了解几点:
1、Java中的每个对象都有唯一的一个内部锁与之对应;
2、synchronized关键字是通过使用内部的对象锁来实现同步和互斥的;
3、使用了synchronized关键字,并不意味着绝对的线程安全。
由于sychronized关键字是通过对象的内部锁来实现同步互斥的,于是当某一个对象的一个synchronized方法被某一线程A执行时,其他线程若调用该对象的其他synchronized方法时,均会被阻塞,直到线程A执行完相应的synchronized方法。同时,这也意味着synchronized方法的执行不影响非synchronized方法,即对象的synchronized方法被执行的时候,其非synchronized方法照样可以得到执行。
接下来,简单说一下synchronized的用法。可以使用synchronized关键字声明一个实例方法,如:
同样,也可以将静态方法声明为synchronized。当调用这种方法时,该方法获得的是相关的类对象的内部锁。例如,B类有一个静态同步的方法,那么当该方法被调用时,B.class对象的锁被锁住。此时,没有其他线程可以调用同一个类的这个或任何其他的静态同步方法。
还可以在方法内部使用synchronized语句块。例如:
synchronized关键字使用对象的内部锁实现同步和互斥,但内部锁存在一些局限:
1、不能中断一个正在试图获得锁的线程。
2、试图获得锁时不能设定超时。
3、每个内部锁只有一个条件,可能是不够的。
使用synchronized关键字时,要先了解几点:
1、Java中的每个对象都有唯一的一个内部锁与之对应;
2、synchronized关键字是通过使用内部的对象锁来实现同步和互斥的;
3、使用了synchronized关键字,并不意味着绝对的线程安全。
由于sychronized关键字是通过对象的内部锁来实现同步互斥的,于是当某一个对象的一个synchronized方法被某一线程A执行时,其他线程若调用该对象的其他synchronized方法时,均会被阻塞,直到线程A执行完相应的synchronized方法。同时,这也意味着synchronized方法的执行不影响非synchronized方法,即对象的synchronized方法被执行的时候,其非synchronized方法照样可以得到执行。
接下来,简单说一下synchronized的用法。可以使用synchronized关键字声明一个实例方法,如:
public class A { public synchronized void a(){ //方法 } }这样,要调用对象的方法a必须获得该对象的内部锁。于是,对于该对象,每个时刻最多只能有一个synchronized方法在执行。
同样,也可以将静态方法声明为synchronized。当调用这种方法时,该方法获得的是相关的类对象的内部锁。例如,B类有一个静态同步的方法,那么当该方法被调用时,B.class对象的锁被锁住。此时,没有其他线程可以调用同一个类的这个或任何其他的静态同步方法。
还可以在方法内部使用synchronized语句块。例如:
public void b(){ //非同步块语句。 synchronized(this){ //同步块中的语句。 } }当该方法执行到synchronized(this)的时候,就会获取该对象的内部锁。同样的,也可以使用同步块synchronized(A.class)来锁住类对象。但是不要使用synchronized( this.getClass() )来锁住类对象,因为这种做法对于该类的子类对象会失效。
synchronized关键字使用对象的内部锁实现同步和互斥,但内部锁存在一些局限:
1、不能中断一个正在试图获得锁的线程。
2、试图获得锁时不能设定超时。
3、每个内部锁只有一个条件,可能是不够的。
相关文章推荐
- 关于java的synchronized关键字,wait(),notify() 的例子,方便大家快速理解和应用。
- 对java synchronized 关键字的理解
- Java线程的简单等待与唤醒【synchronized关键字】
- 深入理解Java并发4——synchronized关键字
- Java线程同步机制synchronized关键字的理解
- java中的synchronized关键字的理解
- java synchronized关键字以及对线程锁的理解
- Java关于Synchronized关键字在不同位置使用的理解
- 深入理解java中的synchronized关键字
- java里同步关键字synchronized 理解
- Java线程同步机制synchronized关键字的理解
- 我是菜鸟:java多线程join方法,volatile以及synchronized关键字理解
- 深入理解java中的synchronized关键字
- 深入理解java中的synchronized关键字
- 关于java中的synchronized关键字的理解
- java synchronized关键字理解
- Java关于Synchronized关键字在不同位置使用的理解
- Java中使用synchronized关键字实现简单同步操作示例
- JAVA synchronized关键字及对象锁通俗理解
- 关于java synchronized关键字的一些理解