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
12下一页>