欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java线程等待与唤醒

程序员文章站 2022-07-10 12:53:45
输出结果:main start t1 -> main wait() -> t1 call notify() -> main continue 其实调用t1.start(),t1为就绪状态,只是main方法中,t1被main线程锁住了,t1.wait()的时候,让当前线程等待,其实是让main线程等待 ......

class threada extends thread{

    public threada(string name) {
        super(name);
    }

    public void run() {
        synchronized (this) {
            system.out.println(thread.currentthread().getname()+" call notify()");
            notify();
        }
    }
}

public class waittest {

    public static void main(string[] args) {

        threada t1 = new threada("t1");

        synchronized(t1) {
            try {
                // 启动“线程t1”
                system.out.println(thread.currentthread().getname()+" start t1");
                t1.start();

                // 主线程等待t1通过notify()唤醒。
                system.out.println(thread.currentthread().getname()+" wait()");
                t1.wait();

                system.out.println(thread.currentthread().getname()+" continue");
            } catch (interruptedexception e) {
                e.printstacktrace();
            }
        }
    }
}

输出结果:main start t1 -> main wait() -> t1 call notify() -> main continue

其实调用t1.start(),t1为就绪状态,只是main方法中,t1被main线程锁住了,t1.wait()的时候,让当前线程等待,其实是让main线程等待了,然后释放了t1锁,t1线程执行,打印t1 call notify(),然后唤醒main线程,最后结束;