我想测试线程同步的问题,可是,不管调用yield()还是sleep(),线程都不让出使用权,怎么回事呢?
zk21 2003-08-22 02:28:18 public class SynchronizeTest {
public static void main(String arg[]) {
SynchronizeTest mother = new SynchronizeTest();
Thread1 t1 = mother.new Thread1();
Thread2 t2 = mother.new Thread2();
Thread3 t3 = mother.new Thread3();
SObject so = mother.new SObject();
t1.setSo(so);
t2.setSo(so);
t3.setSo(so);
t3.setPriority(t3.getThreadGroup().getMaxPriority());
t1.run();
//t2.run();
t3.run();
}
class SObject {
synchronized public void sm1() {
int value = 0;
for (int i = 0; i < 10; i++) {
System.out.println("in synm 1,begin...");
Thread.yield();
// try {
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
System.out.println("in synm 1,end");
}
}
synchronized public void sm2() {
int value = 0;
for (int i = 0; i < 10; i++) {
System.out.println("in synm 2");
}
//Thread.yield();
}
public void usm1() {
int value = 0;
for (int i = 0; i < 10; i++) {
System.out.println("in Usynm 1,begin...");
// try {
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
System.out.println("in Usynm 1,end");
}
}
public void usm2() {
int value = 0;
for (int i = 0; i < 10; i++) {
System.out.println("in Usynm 2");
//Thread.yield();}
}
}
}
class Thread1 extends Thread {
SObject so;
public void setSo(SObject object) {
so = object;
}
public void run() {
yield();
while (true) {
so.usm1();
}
}
}
class Thread2 extends Thread {
SObject so;
public void setSo(SObject object) {
so = object;
}
public void run() {
yield();
while (true) {
so.sm2();
}
}
}
class Thread3 extends Thread {
SObject so;
public void setSo(SObject object) {
so = object;
}
public void run() {
yield();
while (true) {
so.usm2();
}
}
}
}
输出却总是这样:in Usynm 1,begin...
in Usynm 1,end
in Usynm 1,begin...
in Usynm 1,end
in Usynm 1,begin...
in Usynm 1,end
in Usynm 1,begin...
in Usynm 1,end
in Usynm 1,begin...
in Usynm 1,end
谢谢!!!