本帖最后由 余志强 于 2011-10-15 15:25 编辑
内部类 class Outputer {
String s = "";
public void output(String str) {
synchronized (s) {
for (int i = 0; i < str.length(); i++) {
System.out.print(str.toCharArray());
}
System.out.println();
}
}
public synchronized void output2(String str) {
for (int i = 0; i < str.length(); i++) {
System.out.print(str.toCharArray());
}
System.out.println();
}
}
新建两个线程:
public void init() {
final Outputer out = new Outputer();
// 创建两个线程
new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
out.output("zhangxiaoxiang");
}
}
}).start();
new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
out.output2("lihuoming");
}
}
}).start();
}
主方法:
public static void main(String[] args) {
new TraditionalThreadSynchronizd().init();
}
在同步代码块中使用String对象最为同步监视器,在同步方法中使用this作为监视器,那么为什么输出却不同步呢?
我是这样想的,当一个线程执行同步代码块,另一个线程也来执行该同步代码块,因为同步监视器s,是一样的,那么后来的线程只有等待,同步方法我想也是这样的,那么输出却不同步呢?
我知道只要把同步方法和同步代码块的同步监视器都改成this就可以了,但是上面的为什么不行呢?
|
|