java中的wait和notify方法

/*
守护线程
 */ 
        // 启动线程之前,将线程设置为守护线程
        t.setDaemon(true);
  // 即使是死循环,但由于该线程是守护者,当用户线程结束,守护线程自动终止。
1.4、关于object类中的wait和notify方法。(生产者和消费者模式!)
第一:wait和notify方法不是线程对象的方法,是java中任何一个java对象都有的方法,因为这两个方式是Object类中自带的。
      wait方法和notify方法不是通过线程对象调用,
      不是这样的:t.wait(),也不是这样的:t.notify()..不对。
第二:wait()方法作用?
      Object o = new Object();
      o.wait();
      表示:
        让正在。对象上活动的线程进入等待状态,无期限等待,直到被唤醒为止
        o.wait();方法的调用,会让"当前线程(正在o对象上活动的线程)”进入等待状态。
第三:notify()方法作用?
     Object o = new Object();  
       o.notify();
表示:
唤醒正在。对象上等待的线程。
还有一个notifyA来了()方法:
这个方法是唤醒。对象上处于等待的所有线程.

package com.cn.oc.thred;

import java.util.ArrayList;
import java.util.List;

public class ThreadTest16 {
    public static void main(String[] args) {
          //创建1个仓库对象
        List list = new ArrayList();
        //创建生产者线程
        Thread t1 = new Thread(new Producer(list));
        //创建消费者线程
        Thread t2 = new Thread(new Consumer(list));
        t1.setName("生产者线程");
        t2.setName("消费者线程");
        //线程启动
        t1.start();
        t2.start();
    }
}
//生产线程
class Producer implements Runnable {
    private List list;
    public Producer(List list){
        this.list = list;
    }
    @Override
    public void run() {
        //一直生产
        while (true) {
            synchronized(list){
                if(list.size()>0){
                    try {//当前线程等待,释放锁
                        list.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                //进行生产
                  //添加元素
                Object obj = new Object();
                list.add(obj);
                System.out.println(Thread.currentThread().getName()+"------>"+obj);
                //唤醒消费者
                list.notifyAll();
            }
        }

    }
}
//消费线程
class Consumer implements Runnable{
    private List list;
    public Consumer(List list){
        this.list = list;
    }
    @Override
    public void run() {
          //一直消费
   while(true){
       synchronized (list){
           if(list.size() == 0){
               try {
                   list.wait();
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           }

           //进行消费
           Object obj = list.remove(0);
           System.out.println(Thread.currentThread().getName()+"------>"+obj);
           //唤醒生产者线程
           list.notifyAll();
       }
   }
    }
}

上一篇:libunwind 中的宏


下一篇:SAP 电商云 Spartacus UI CI e2e-cypress.sh 脚本文件分析