wait和notify简单学习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wait和notify简单学习相关的知识,希望对你有一定的参考价值。

学C的时间粗劣写过些wait和notify的代码,java里接触的时候并没有花什么时间学习,本质上来说并没有区别,这两个方法都要和锁配合使用,java里常见和synchronized关键词配合使用,使用上十分简单。需要注意的地方是wait会释放锁,而notify并不释放锁,仍然需要代码去释放锁,其他进程即使收到notify的信号,如果没有获得锁是无法唤醒的。
测试代码如下
public class DemoApplication {
//使用最简单的锁
public static Object lock=new Object();

public static class Thread1 extends Thread{
    @Override
    public void run() {
        synchronized (lock){
            System.out.println("this is "+Thread.currentThread().getId());
            try {
                //模拟工作1
                Thread.sleep(1000);
                System.out.println(Thread.currentThread().getId()+" begin to wait");
                lock.wait();
                System.out.println(Thread.currentThread().getId()+" get lock and restart");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getId()+" work complete");
        }
    }
}
public static class Thread2 extends Thread{
    @Override
    public void run() {
        synchronized (lock){
            System.out.println("this is "+Thread.currentThread().getId());
            try {
                //模拟工作2
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getId()+" egin to notify");
            lock.notify();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getId()+" work complete");
        }
    }
}

public static void main(String[] args) throws InterruptedException {
    new Thread1().start();
    new Thread2().start();

}

}

运行结果
this is 18
18 begin to wait
this is 19
19 egin to notify
19 work complete
18 get lock and restart
18 work complete

以上是关于wait和notify简单学习的主要内容,如果未能解决你的问题,请参考以下文章

java多线程wait,notify,countDownLatch的一些简单应用

多线程学习之路-学习wait和notify

Java学习整理之Object的wait和notify方法

Java学习整理之Object的wait和notify方法

JAVA多线程之wait/notify

java中使用wait()和notify()的简单场景