public class Thread1 implements Runnable {
public void run() {
synchronized(this) { //请问这里的this怎样理解,t1和t2的地址不是不一样嘛,怎么会只有一个线程运行???
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().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");
ta.start();
tb.start();
}
} 收起
public void run() {
synchronized(this) { //请问这里的this怎样理解,t1和t2的地址不是不一样嘛,怎么会只有一个线程运行???
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().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");
ta.start();
tb.start();
}
} 收起
2011-11-29 16:05
最佳答案
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
其他回答
嗯,楼上解说正确,不罗嗦了。
PythonScanner
2011-12-03 15:37
本文详细解释了Java中使用synchronized(this)时的线程同步机制。通过具体示例代码展示了如何利用synchronized关键字实现线程间的互斥访问,确保同一时刻只有一个线程能执行临界区代码。

3118







12下一页>