sleep和wait的区别面试题,

  sleep和wait的区别面试题,

  如何解决写爬虫IP受阻的问题?立即使用。

  我们先介绍一下锁池和等待池的概念。

  我们先来看看锁池的概念。

  所有需要竞争同步锁的线程都将被放在锁池中。例如,如果当前对象的锁已经被一个线程获得,其他线程需要在这个锁池中等待。当前一个线程释放同步锁,等待锁池中的线程竞争同步锁时,一个线程会进入就绪队列等待cpu资源分配。

  我们来看一下等待池的概念。

  当我们调用wait()方法时,线程会被放在等待池中,等待池的线程不会竞争同步锁。只有在调用notify()或notifyAll()时,等待池的线程才会开始竞争锁。notify()从等待池中随机选择一个线程放入锁池,而notifyAll()将所有等待池的线程放入锁池。

  Sleep是Thread类的静态局部方法,wait是Object的局部方法。

  sleep方法不会释放锁,但是等待将被释放并添加到等待队列中。

  睡眠就是释放cpu的执行资格和执行权,停止运行这个线程,在定时事件结束时取回cpu资源,参与cpu调度,获得cpu资源后继续运行。如果线程在睡眠期间有锁,那么睡眠不会释放这个锁,而是将锁带入冻结状态,也就是说其他需要这个锁的线程根本无法获得这个锁。也就是说程序无法执行。如果其他线程在睡眠期间调用该线程的中断方法,该线程也会抛出interruptexception返回,与wait相同。sleep方法不依赖于synchronized的同步器,但是wait依赖于synchronized关键字。

  Sleep不需要唤醒(睡眠后退出区块),wait需要(不指定时间需要被别人打断)。

  Sleep一般用于当前线程休眠,或者轮询暂停操作,而wait则多用于多个线程之间的通信。

  Sleep会放弃CPU执行时间,强制上下文切换,wait就不一定了。等待之后,可能还有机会重新竞争锁继续执行。

  yield()执行后,线程直接进入就绪状态,立即释放cpu的执行权,但仍保留cpu的执行资格,所以有可能下一次cpu调度线程时,线程会获得执行权,继续执行。

  (学习视频分享:java视频教程)

  执行join()后,线程进入阻塞状态。例如,如果线程A的join()在线程B中被调用,那么线程B将进入阻塞队列,并指示线程A结束或中断该线程。

  公共静态void main(String[] args)引发InterruptedException {

  线程t1=新线程(()-{

  尝试{

  thread . sleep(4000);

  } catch (InterruptedException e) {

  e . printstacktrace();

  }

  System.out.println(睡眠线程);

  });

  t1 . start();

  t1 . join();

  System.out.println(“线程执行完成”);

  }原文链接:https://blog.csdn.net/lxn1023143182/article/details/114134498

  推荐:java面试问答。以上是面试官:请详细说说sleep()、wait()、join()和yield()的区别。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: