public class SomeThing {
public static void main(String[] args) throws InterruptedException{
Thread a=new Thread(new Task1());
a.setName("a");
doing();
a.start();
}
static void doing() throws InterruptedException{
String name=Thread.currentThread().getName();
int p=Thread.currentThread().getPriority();
for(int i=0; i<50; i++){
System.out.printf("%-10s__%02d__p%d%n",name,i,p);
if(name.equals("main") && i==20)
Thread.yield(); //***
}
}
static class Task1 implements Runnable{
public void run(){
try{
doing();
}catch(InterruptedException ie){
System.out.println("Task1");
}
}
}
}
预期结果:
当输出"main __20__p5"
以后,
紧接着的一行应该是a开头"a......"
预期结果没达到,为什么?
public static void main(String[] args) throws InterruptedException{
Thread a=new Thread(new Task1());
a.setName("a");
doing();
a.start();
}
static void doing() throws InterruptedException{
String name=Thread.currentThread().getName();
int p=Thread.currentThread().getPriority();
for(int i=0; i<50; i++){
System.out.printf("%-10s__%02d__p%d%n",name,i,p);
if(name.equals("main") && i==20)
Thread.yield(); //***
}
}
static class Task1 implements Runnable{
public void run(){
try{
doing();
}catch(InterruptedException ie){
System.out.println("Task1");
}
}
}
}
预期结果:
当输出"main __20__p5"
以后,
紧接着的一行应该是a开头"a......"
预期结果没达到,为什么?
不能保证虚拟机不会再次选到刚刚暂停的线程。
也许就不行了。这种无法确定结果的东西,还是少用。如果你想保证线程会暂停,用sleep(timeout),
它可以保证至少暂停timeout 毫秒。