Java多线程的两种休眠sleep()和wait()

本文详细介绍了Java多线程中sleep()和wait()方法的区别与应用。sleep()方法使线程休眠指定时间后自动恢复执行,不释放锁;而wait()方法则需其他线程唤醒,会释放锁。文中通过实例代码展示了它们在并发控制中的作用,并附有线程状态图帮助理解。
摘要由CSDN通过智能技术生成

Java多线程的两种休眠


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、sleep()方法

自我休眠,自我唤醒(休眠时间到后自我苏醒)。
每一个对象都有一把锁,sleep不会释放锁。

public class Thread01 extends Thread{
	@Override
	public void run() {
		System.out.println("当前执行的线程是"+Thread.currentThread().getName());
		for (int i = 0; i < 100; i++) {
			try {
				Thread.sleep(1000);// 模拟网络延时,放大问题的发生性
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(i);
		}
	}
	public static void main(String[] args) {
		Thread01 t1 = new Thread01();
		t1.start();
	}
}

二、wait()方法

不会主动苏醒,需要另外的线程调用notify()/notifyAll()方法唤醒。
wait()方法会释放锁。

public class Test{
    public static void main(String[] args){
        Service mService = new Service();
        Thread sleepThread = new Thread(new SleepThread(mService));
        Thread waitThread = new Thread(new WaitThread(mService));
        
        waitThread.start();
        sleepThread.start();
    }
}

class Service {
    public void mSleep(){
        synchronized(this){
            try{
                Thread.sleep(1000);
                this.notify();//或 this.notifyAll()
                System.out.println(" 唤醒等待:结束时间:"+System.currentTimeMillis());
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }

    public void mWait(){
        synchronized(this){
            try{
                System.out.println(" 等待开始:当前时间:"+System.currentTimeMillis());
                this.wait();
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }
}

三、线程状态图

sleep()方法和wait()方法
相同点:一旦执行方法以后,都会使得当前的进程进入阻塞状态。
不同点:
1.方法声明方式不同,sleep()方法在Thread类中声明,wait()方法在Object类中声明。
2.调用的条件不同,sleep可以在任何需要的场景下调用,wait必须使用在同步代码块或者同步方法中。
3.是否释放锁,sleep不会释放,wait会释放。
sleep()方法和wait()方法的状态图:如下

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值