当前位置:首页 > 开发 > Web前端 > 前端 > 正文

多线程-notify和wait

发表于: 2011-10-09   作者:cuityang   来源:转载   浏览次数:
摘要: wait() 无限制等待下去   wait(1000) 等待1s b.wait();的意思是临时释放锁,并阻塞当前线程 直到notify 或(notifyAll ) notify()所在的同步块运行完之后,wait所在的线程就可以继续执行.   notify() 和 wait() 需要在 synchronized 之中   packag

wait() 无限制等待下去   wait(1000) 等待1s

b.wait();的意思是临时释放锁,并阻塞当前线程 直到notify 或(notifyAll )

notify()所在的同步块运行完之后,wait所在的线程就可以继续执行.

 

notify() 和 wait() 需要在 synchronized 之中

 

package test;

class Ticker extends Thread {
        int tickets=50;
   public static void main(String[] args) {
         System.out.println(Thread.currentThread().getName() + " 线程运行开始!");
         Ticker test = new Ticker();
         Thread thread1 = new Thread(test);
         Thread thread2 = new Thread(test);
         thread1.start();
         thread2.start();
         System.out.println(Thread.currentThread().getName() + " 线程运行结束!");
     }
 
     public void run() {
         System.out.println(Thread.currentThread().getName() + " 线程运行开始!");
         while(tickets>0){
              output();
           }
         System.out.println(Thread.currentThread().getName() + " 线程运行结束!");
     }
    
     public synchronized void output(){
      //待注销开始 如果注销这段 结果会变化
      notify();
         try {
                wait();
            } catch (Exception e) {
                e.printStackTrace();
            }
            //待注销结束
      System.out.println(tickets + " " + Thread.currentThread().getName());
      tickets--;
     }
}

 

结果如下:

main 线程运行开始!
main 线程运行结束!
Thread-1 线程运行开始!
Thread-2 线程运行开始!
50 Thread-1
49 Thread-2
48 Thread-1
47 Thread-2
46 Thread-1
45 Thread-2

如果把 待注销开始和待注销结束之间的代码注销后可能出现结果如图:

main 线程运行开始!
main 线程运行结束!
Thread-2 线程运行开始!
50 Thread-2
49 Thread-2
Thread-1 线程运行开始!
48 Thread-2
47 Thread-1

 

解释:1线程运行后到wait 一直到2线程notify后然后wait后 1线程继续运行,

           1线程继续运行到notify然后wait  此时通知2线程 运行, 所以没有注销代码的时候会1、2线程交替运行。

这里只有两个线程,所以不用指定对象名后再notify

多线程-notify和wait

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
wait-notify机制 a. 当synchronized方法中的wait方法被调用时,当前线程将被中断运行,并且放弃该对
注意:这些方法属于Object,而不属于Thread。 每一个对象除了有一个锁之外,还有一个等待队列(wait
wait-notify机制 a. 当synchronized方法中的wait方法被调用时,当前线程将被中断运行,并且放弃该对
1、问题的引出 class MyThread implements Runnable{ private int ticket = 5 ; // 假设一共有5张票
继续来看blog:http://blog.csdn.net/zyplus/article/details/6672775 “Obj.wait(),与Obj.notify(
Java 中除了关键字 synchronized 能够实现线程同步外,还可以使用 wait 和 notify/notify 实现同步
wait-notify用在经典的生产者-消费者模型。一般代码都是先初始化consumer,然后再初始化producer,
wait-notify用在经典的生产者-消费者模型。一般代码都是先初始化consumer,然后再初始化producer,
线程同步 前言:我们上一篇http://davidisok.iteye.com/blog/2105369讲了线程的基本介绍,这一篇主
wait-notify用在经典的生产者-消费者模型。一般代码都是先初始化consumer,然后再初始化producer,
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号