Java Synchronized 关键字

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

java Synchronized 关键字本文内容 Synchronized 关键字 示例 Synchronized 方法 内部锁(Intrinsic Locks)和 Synchronization 参考资料 下载 Demo Synchronized 关键字 Java 语言提供两个基本的同步机制:synchronized 方法(synchronized methods )和 synchronized 语句(synchronized statements)。

示例 先大概说一下 Java Synchronized 关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻只有一个线程执行该段代码。

当两个线程访问同一个对象 synchronized(this) 代码块时,只能有一个线程执行,另一个线程必须等待这个线程执行完后才能执行; 但是,当一个线程访问一个对象 synchronized(this) 同步代码块时,另一个线程仍能访问该对象的非 synchronized(this) 代码块; 尤其是,当一个线程访问一个对象的一个 synchronized(this) 代码块时,其他线程对该对象中其他所有 synchronized(this) 代码块的访问也将被阻塞; 以上规则对其它对象锁同样适用。 如下代码所示:

package cn.db.syncdemo;

public class NewClass {

/**

* 同步方法

*/

public void synchronizedMethod() {

synchronized (this) {

int i = 5;

while (i-- > 0) {

System.out.PRintln(Thread.currentThread().getName() + " : " + i

+ " synchronized method");

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

System.out.println(e.toString());

}

}

}

}

/**

* 同步方法 2

*/

public void synchronizedMethod2() {

synchronized (this) {

int i = 5;

while (i-- > 0) {

System.out.println(Thread.currentThread().getName() + " : " + i

+ " synchronized method 2");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

System.out.println(e.toString());

}

}

}

}

/**

* 非同步方法

*/

public void nonSynchronizedMethod() {

int i = 5;

while (i-- > 0) {

System.out.println(Thread.currentThread().getName() + " : " + i

+ " nonSynchronized method");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

System.out.println(e.toString());

}

}

}

public static void main(String[] args) {

final NewClass mClass = new NewClass();

// t1 和 t2 都要访问同一个同步方法 synchronizedMethod

Thread t1 = new Thread(new Runnable() {

public void run() {

mClass.synchronizedMethod();

}

}, "Thread 1");

Thread t2 = new Thread(new Runnable() {

public void run() {

mClass.synchronizedMethod();

}

}, "Thread 2");

// t3 要访问另一个同步方法 synchronizedMethod2

Thread t3 = new Thread(new Runnable() {

public void run() {

mClass.synchronizedMethod2();

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航