码迷,mamicode.com
首页 > 其他好文 > 详细

wait和notify简单学习

时间:2018-07-09 16:33:25      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:dem   ack   app   res   ring   new t   rest   cep   catch   

学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简单学习

标签:dem   ack   app   res   ring   new t   rest   cep   catch   

原文地址:http://blog.51cto.com/mawielbue/2139254

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!