sleep和wait区别

sleep和wait区别

1,所属类与用途

sleep: 来自java.lang.Thread类,是一个静态方法,可让当前线程暂停执行指定的时间,主要用于线程的延迟操作,如定时任务,也可以防止线程过于频繁的占用cpu资源。
wait: 来自java.lang.Object类,是实例方法,用于线程间的协调和通信。当一个线程调用对象的wait方法时,该线程会释放该对象监视器(锁)的持有权,并进入等待状态。wait方法必须要搭配synchronized使用。

2,锁的处理–线程是否释放锁

sleep:睡眠期间不释放锁,睡眠结束,线程继续执行,不考虑其他线程的状态,
wait: 线程调用wait方法,会释放线程持有的锁,其他线程可以获得这个锁并继续执行,知道等待的线程被唤醒。

3,唤醒方式

sleep:睡眠时间结束,自动唤醒,不依赖其他线程。
wait:必须通过其他线程调用同一对象的notify或者notifyAll方法才能被唤醒,唤醒后需要重新竞争获得对象锁才能继续执行。

4,异常处理

sleep: 在java SE 1.5以后,Thread.sleep(long mills) 方法会抛出InterruptedException,需要被捕获处理
wait: 同样会抛出InterruptException,也需要被捕获处理。此外,如果不在synchronized代码块或方法中调用wait,则会抛出IllegalMonitorStateException。

总结

sleep方法主要用于线程自身的延时执行,不影响同步状态;而wait方法则用于线程间的协作,是并发编程中的重要工具,直接影响到线程同步与通信。

什么是实例方法(创建对象,然后调用方法)

在面向对象编程中,实例方法(Instance Method)是指在类中定义的、与特定对象关联的方法。当类的实例(对象)被创建后,实例方法可以通过该对象进行调用。实例方法可以访问类的实例变量,并且在执行时隐式地携带一个指向调用它的对象的引用,通常在方法的第一个参数中体现(在Java中习惯使用this关键字引用当前对象)。

在Java中,实例方法的定义格式如下:

修饰符 返回类型 方法名(参数列表) {
    // 方法体
    // 可以访问类的实例变量和调用其他实例方法
}

例如:

public class MyClass {
    private int myVariable;

    // 实例方法
    public void setMyVariable(int value) {
        this.myVariable = value; // 使用this关键字访问实例变量
    }

    public int getMyVariable() {
        return this.myVariable; // 同样是实例方法,返回实例变量的值
    }
}

// 使用实例方法
MyClass myObject = new MyClass();
myObject.setMyVariable(10); // 通过实例调用实例方法
int variableValue = myObject.getMyVariable(); // 再次通过实例调用另一个实例方法

实例方法与类方法(静态方法,static method)不同,类方法是与类而非类的实例关联的,可以直接通过类名调用,不依赖于任何特定对象的存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

见未见过的风景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值