关于 Java synchronized(this) 的问题
用法:
public class Thread1 implements Runnable {
public void run() {
<strong>synchronized(this)</strong> {
for (int i = 0; i < 5; i++) {
<span style="white-space:pre"> </span>System.out.println(Thread.currentThread().getName()+ " synchronized loop " + i);
<span style="white-space:pre"> </span>}
}
}
public static void main(String[] args) {
<span style="white-space:pre"> </span> Thread1 t1 = new Thread1();
Thread ta = new Thread(t1,"A");
Thread tb = new Thread(t1,"B");
ta.start();
tb.start();
}
}
分析:
synchronized(this)
这里的this是指当前对象,也就是说不管ta还是tb,刚开始运行这段代码的时候会给这段代码加个锁,这样即使运行到中间被替换了,另一个线程也不会执行这段代码,因为这段代码加锁了,而钥匙在给代码加锁的那个线程手里,只有加锁的线程运行完这段代码,才会给代码解锁.然后其他线程才能执行这段代码..
加个synchronized(this)以后运行结果是这样:
A synchronized loop 0
A synchronized loop 1
A synchronized loop 2
A synchronized loop 3
A synchronized loop 4
B synchronized loop 0
B synchronized loop 1
B synchronized loop 2
B synchronized loop 3
B synchronized loop 4
不加的话是这样:(顺序乱了,有好多种结果,这里只是其中一种)..
A synchronized loop 0
B synchronized loop 0
A synchronized loop 1
B synchronized loop 1
A synchronized loop 2
B synchronized loop 2
A synchronized loop 3
B synchronized loop 3
B synchronized loop 4
A synchronized loop 4