如何在Java

时间:2019-04-10 03:01:49

标签: java multithreading

为什么3秒钟后不能通知t1线程?

    public class MyThread extends Thread{
        public MyThread(String name) {
        super(name);
    }

    //private int ticket = 100;
    public void run() {
        synchronized(this) {
            System.out.println(Thread.currentThread().getName() + " run ");

            while(true)
                ;

        }
    }
}


    public class MultieThreadTest {
        public static void main(String[] args) {
        MyThread t1 = new MyThread("t1");

        synchronized(t1) {
            try {
                System.out.println(Thread.currentThread().getName() + " start t1 ");
                t1.start();

                System.out.println(Thread.currentThread().getName() + " call wait 3000ms");
                t1.wait(3000);

                System.out.println(Thread.currentThread().getName() + " continue ");
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

结果是:

主开始t1

主叫等待3000ms

t1运行

但我认为应该是:

主开始t1

主叫等待3000ms

t1运行

// 3秒后

主要继续

1 个答案:

答案 0 :(得分:0)

[...A].toLocaleString(); //or [].concat(A).toLocaleString(); 替换为t1.wait(3000);以获得延迟。

Thread.sleep(3000);用于挂起方法,直到其他线程在同一对象上调用Object.wait()Object.notify()以恢复挂起的线程。

请参阅链接: https://www.baeldung.com/java-wait-notify