admin 管理员组

文章数量: 1184232


2024年3月21日发(作者:eject)

java synchronized详解

记下来,很重要。

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻

最多只有一个线程执行该段代码。

一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块

时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块

以后才能执行该代码块。

二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个

线程仍然可以访问该object中的非synchronized(this)同步代码块。

三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,

其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。

四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个

synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对

该object对象所有同步代码部分的访问都被暂时阻塞。

五、以上规则对其它对象锁同样适用.

举例说明:

一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块

时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块

以后才能执行该代码块。

packageths;

public class Thread1 implements Runnable {

public void run() {

synchronized(this) {

for (int i = 0; i < 5; i++) {

n(tThread().getName() + "

synchronized loop " + i);

}

}

}

public static void main(String[] args) {

Thread1 t1 = new Thread1();

Thread ta = new Thread(t1, "A");

Thread tb = new Thread(t1, "B");

();

();

}

}

结果:

A synchronized loop 0

A synchronized loop 1

A synchronized loop 2

A synchronized loop 3


本文标签: 线程 代码 执行 访问 对象