zoukankan      html  css  js  c++  java
  • java中的sleep()和wait()的区别

    对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。

      sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。

    在调用sleep()方法的过程中,线程不会释放对象锁。

      而当调用wait()方法的时候,线程会放弃对象锁(仍然持有资源),进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

    /**
     * 
     */
    package com.b510.test;
    
    /**
     * java中的sleep()和wait()的区别
     * @author Hongten
     * @date 2013-12-10
     */
    public class TestD {
    
        public static void main(String[] args) {
            new Thread(new Thread1()).start();
            try {
                Thread.sleep(5000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            new Thread(new Thread2()).start();
        }
        
        private static class Thread1 implements Runnable{
            @Override
            public void run(){
                synchronized (TestD.class) {
                System.out.println("enter thread1...");    
                System.out.println("thread1 is waiting...");
                try {
                    //调用wait()方法,线程会放弃对象锁,进入等待此对象的等待锁定池
                    TestD.class.wait();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                System.out.println("thread1 is going on ....");
                System.out.println("thread1 is over!!!");
                }
            }
        }
        
        private static class Thread2 implements Runnable{
            @Override
            public void run(){
            //对TestD.class加锁 synchronized (TestD.
    class) { System.out.println("enter thread2...."); System.out.println("thread2 is sleep...."); //只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。 TestD.class.notify(); //================== //区别 //如果我们把代码:TestD.class.notify();给注释掉,即TestD.class调用了wait()方法,但是没有调用notify() //方法,则线程永远处于挂起状态。 try { //sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程, //但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 //在调用sleep()方法的过程中,线程不会释放对象锁。 Thread.sleep(5000); } catch (Exception e) { e.printStackTrace(); } System.out.println("thread2 is going on...."); System.out.println("thread2 is over!!!"); } } } }
  • 相关阅读:
    MQTT入门1 -- mosquitto 安装
    利用wireshark抓取TCP的整个过程分析。
    ARM Linux驱动篇 学习温度传感器ds18b20的驱动编写过程
    移植ARM linux下远程连接工具dropbear
    飞凌2440开发板制作路由器
    基于视觉寻迹的寻路算法
    Linux I2C驱动架构
    Linux 设备树学习——基于i2c总线分析
    Linux SPI驱动学习——注册匹配
    从Linux内核LED驱动来理解字符设备驱动开发流程
  • 原文地址:https://www.cnblogs.com/lixiaolun/p/5251986.html
Copyright © 2011-2022 走看看