Java中的wait方法 简单介绍。

一 wait方法怎么用?

package com.aaa.threaddemo;
/*
 * 多线程中的wait方法?    
    public final void wait() throws InterruptedException {
        wait(0);
    }
    
  1  隶属于object,因为Java希望把并发控制做到每一个Object里 
  2  调用wait方法,线程会放弃对象锁,进入等待此对象的等待对象池。
  3  只有针对此对象调用notify方法后,本线程才进入对象锁定池,准备获取对象锁,进行运行状态。否则就是一直挂起状态。
    
    
 * 
 * 
 */
public class WaitDemo {
    public static void main(String[] args) throws InterruptedException {
        
        // 新建两个线程 测试wait方法。
        new Thread(new Runnable() {
            public void run() {
                // 4.synchronized后面括号里是类,此时,线程获得的是对象锁.
                synchronized (WaitDemo.class) {
                    try {
                        System.out.println("线程一开始");
                        
                        //wait 方法 线程会放弃对象锁,进入等待此对象的等待锁定池,此时线程挂起。
                        WaitDemo.class.wait();
                    } catch (InterruptedException e) {
                            e.printStackTrace();
                    }
                    System.out.println("线程一结束");
                }
                
            }
        }).start();
        
        new Thread(new Runnable() {
            public void run() {
                synchronized (WaitDemo.class) {
                    System.out.println("线程二开始");
                    
                    //只有针对此对象调用notify方法后,本线程才进入对象锁定池,准备获取对象锁,进入运行状态。
                    //如果不调用这个方法,线程永远都是刮起的状态。
                    WaitDemo.class.notify();
                    System.out.println("线程二结束了");
                }
                
            }
        }).start();    
    }

}

 

 

 

二 测试notify的作用

package com.aaa.threaddemo;
/*
 * 多线程中的wait方法?    
    public final void wait() throws InterruptedException {
        wait(0);
    }
    
  1  隶属于object,因为Java希望把并发控制做到每一个Object里 
  2  调用wait方法,线程会放弃对象锁,进入等待此对象的等待对象池。
  3  只有针对此对象调用notify方法后,本线程才进入对象锁定池,准备获取对象锁,进行运行状态。否则就是一直挂起状态。
    
    
 * 
 * 
 */
public class WaitDemo {
    public static void main(String[] args) throws InterruptedException {
        
        // 新建两个线程 测试wait方法。
        new Thread(new Runnable() {
            public void run() {
                // 4.synchronized后面括号里是类,此时,线程获得的是对象锁.
                synchronized (WaitDemo.class) {
                    try {
                        System.out.println("线程一开始");
                        
                        //wait 方法 线程会放弃对象锁,进入等待此对象的等待锁定池,此时线程挂起。 
                        WaitDemo.class.wait();
                    } catch (InterruptedException e) {
                            e.printStackTrace();
                    }
                    System.out.println("线程一结束");
                }
                
            }
        }).start();
        
        new Thread(new Runnable() {
            public void run() {
                synchronized (WaitDemo.class) {
                    System.out.println("线程二开始");
                    
                    //只有针对此对象调用notify方法后,本线程才进入对象锁定池,准备获取对象锁,进入运行状态。
                    //如果不调用这个方法,线程永远都是刮起的状态。
//                    WaitDemo.class.notify();
                    System.out.println("线程二结束了");
                }
                
            }
        }).start();    
    }

}

 

 

 

posted @ 2020-12-04 18:05  送外卖的小菜鸟  阅读(1898)  评论(0编辑  收藏  举报