class Callme {
void call (String msg) {
System.out.print("[" + msg);
try{
Thread.sleep(1000);
}catch(InterruptedException e) {
System.out.println("Interrupted");
}
System.out.println("]");
}
}
class Caller implements Runnable {
String msg;
Callme target;
Thread t;
public Caller(Callme targ, String s){
target = targ;
msg = s;
t = new Thread(this);
t.start();
}
public void run() {
synchronized(target){
target.call(msg);
}
}
}
class Synch {
public static void main (String args[]) {
Callme target = new Callme();
Caller ob1 = new Caller(target, "Hello");
Caller ob2 = new Caller(target, "Synchronized");
Caller ob3 = new Caller(target, "World");
//wait for threads to end
try {
ob1.t.join();
ob2.t.join();
ob3.t.join();
}catch(InterruptedException e) {
System.out.println("Interrupted");
}
}
}为什么每次运行的结果都不一样?
楼主【hanjingjava】截止到2008-06-28 10:22:24的历史汇总数据(不包括此帖):
发帖数:9 发帖分:140
结贴数:9 结贴分:140
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
毕竟你的线程start的时候是在构造器里.而且run方法里还有同步.能把多次运行的结果帖出来不`~
[Hello]
[World]
[Synchronized]
E:\Learning\Java\JavaTutorial\Core_Java\CoreJavaPro>java Synch
[Hello]
[Synchronized]
[World]E:\Learning\Java\JavaTutorial\Core_Java\CoreJavaPro>java Synch
[Hello]
[World]
[Synchronized]E:\Learning\Java\JavaTutorial\Core_Java\CoreJavaPro>java Synch
[Hello]
[World]
[Synchronized]E:\Learning\Java\JavaTutorial\Core_Java\CoreJavaPro>java Synch
[Hello]
[World]
[Synchronized]E:\Learning\Java\JavaTutorial\Core_Java\CoreJavaPro>java Synch
[Synchronized]
[Hello]
[World]E:\Learning\Java\JavaTutorial\Core_Java\CoreJavaPro>java Synch
[Synchronized]
[World]
[Hello]
[Hello]
[World]
[Synchronized]D:\>java Synch
[Hello]
[World]
[Synchronized]D:\>java Synch
[Hello]
[World]
[Synchronized]D:\>java Synch
[Hello]
[World]
[Synchronized]D:\>java Synch
[Hello]
[World]
[Synchronized]D:\>java Synch
[Hello]
[Synchronized]
[World]D:\>java Synch
[Hello]
[World]
[Synchronized]D:\>java Synch
[Hello]
[Synchronized]
[World]
这是我运行的结果.
hello先执行而 world synchronize后执行的话可以说是抢占.
但是你最后有一个还是synchronize最先执行...不太明白`
[Hello]
[Synchronized]
[World]D:\eclipse\workspace\Test>java Synch
[Hello]
[Synchronized]
[World]D:\eclipse\workspace\Test>java Synch
[Hello]
[Synchronized]
[World]D:\eclipse\workspace\Test>java Synch
[Hello]
[Synchronized]
[World]D:\eclipse\workspace\Test>java Synch
[Hello]
[Synchronized]
[World]这是我运行出来的结果,没问题呀?