Java多线程之wait()、join()、sleep()

wait()、join()、sleep()区别和相似粘贴总结自两篇文章

目录

java中的wait()方法

java中的join()方法

wait()方法和join()方法的相似处

wait()方法和join()方法之间的区别

wait()和sleep()


原文链接:https://blog.csdn.net/weixin_39636253/article/details/114432794

java中的wait()方法

wait()方法的作用是让当前线程进入等待状态,wait()会与notify()和notifyAll()方法一起使用。

notify()和notifyAll()方法的作用是唤醒等待中的线程,notify()方法:唤醒单个线程,notifyAll()方法:唤醒所有线程。

java中的join()方法

join()方法是等待这个线程结束,完成其执行。它的主要起同步作用,使线程之间的执行从“并行”变成“串行”。

也就是说,当我们在线程A中调用了线程B的join()方法时,线程执行过程发生改变:线程A,必须等待线程B执行完毕后,才可以继续执行下去。

wait()方法和join()方法的相似处

1、wait()和join()方法都用于暂停Java中的当前线程,进入等待状态。

2、在Java中都可以调用interrupt()方法中断wait()和join()的线程状态。

3、wait()和join()都是非静态方法。

4、wait()和join()都在Java中重载。wait()和join()没有超时,但接受超时参数。

尽管wait()方法和join()方法有相似之处,但wait()方法和join()方法还是存在差异的。

wait()方法和join()方法之间的区别

1、存在不同的java包中(最明显的区别)

wait()方法需要在java.lang.Object类中声明;而,join()方法是在java.lang.Thread类中声明。

2、使用目的不同

wait()方法用于线程间通信;而join()方法用于在多个线程之间添加排序,第二个线程需要在第一个线程执行完成后才能开始执行。

3、唤醒线程方面的区别

我们可以通过使用notify()和notifyAll()方法启动一个通过wait()方法进入等待状态的线程。但是我们不能打破join()方法所施加的等待,除非或者中断调用了连接的线程已执行完了。

4、同步上下文(最重要的区别)

wait()方法必须从同步(synchronized)的上下文调用,即同步块或方法,否则会抛出IllegalMonitorStateException异常。

但,在Java中有或没有同步的上下文,我们都可以调用join()方法。

原文链接:https://blog.csdn.net/meism5/article/details/90230802

wait()和sleep()

  1. sleep() 是 Thread 类的静态本地方法;wait() 是Object类的成员本地方法
  2. sleep() 方法可以在任何地方使用;wait() 方法则只能在同步方法或同步代码块中使用,否则抛出异常Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
  3. sleep() 会休眠当前线程指定时间,释放 CPU 资源,不释放对象锁,休眠时间到自动苏醒继续执行;wait() 方法放弃持有的对象锁,进入等待队列,当该对象被调用 notify() / notifyAll() 方法后才有机会竞争获取对象锁,进入运行状态
  4. JDK1.8 sleep() wait() 均需要捕获 InterruptedException 异常


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值