首页 > 怎么调出并发不确定性的效果

怎么调出并发不确定性的效果

class HelloWorld {
    public static void main(String[] args) throws InterruptedException {
        Thread myThread = new Thread() {
            public void run(){
                System.out.println("Hello from new Thread!");
            }
        };
        
        myThread.start();
        Thread.yield();
        
        System.out.println("Hello from main Thread!");
        myThread.join();
    }
}

《七周七并发模型》
作者说结果可能是

结果可能一

Hello from main Thread!
Hello from new Thread!

结果可能二

Hello from new Thread!
Hello from main Thread!

为什么我的结果只有一。


  public static void main(String[] args) throws InterruptedException {
        Thread myThread = new Thread(){
            public void run(){
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Hello from new Thread!");
            }
        };
        
        myThread.start();
        Thread.sleep(500);
        
        System.out.println("Hello from main Thread!");
        myThread.join();
    }
    
    

我把题主的yield()换成了sleep(),yield()方法只能让同优先级的线程有执行的机会。可能是主线程比子线程优先级高


可以用sleep:

class HelloWorld {
    public static void main(String[] args) throws InterruptedException {
        Thread myThread = new Thread() {
            public void run(){
                System.out.println("Hello from new Thread!");
            }
        };
        
        myThread.start();
        Thread.yield();
        Thread.sleep(100);
        System.out.println("Hello from main Thread!");
        myThread.join();
    }
}
【热门文章】
【热门文章】