在Thread中的Thread.yield,sleep和wait方法中打开的资源会发生什么

时间:2016-03-26 17:00:41

标签: java multithreading

在采访中我被问到关于多线程的问题 如果在打开资源后调用Thread.yield()或sleep(100000)或wait()方法,多线程中打开的资源会发生什么。 它会被关闭还是会被公开? 请帮助我理解多线程。

1 个答案:

答案 0 :(得分:1)

sleep(100000)导致线程在给定的时间内明确停止执行。因此,您的所有开放资源将保持开放状态。

yield()方法暂停当前正在执行的线程,暂时允许执行相同优先级的剩余等待线程。如果没有等待线程或所有等待线程的优先级较低,则同一线程将继续执行。因此,假设您的线程获得优先权,那么开放资源将被关闭。否则,他们可以保持开放状态。

wait()说“我已经完成了我的CPU时间片。在有人调用notify()之前不要给我另一个时间片。“与sleep()一样,操作系统甚至不会尝试安排你的任务,除非有人调用notify()或其他一些其他唤醒场景。因此,除非通知被调用且开放资源已关闭,否则您的开放资源将保持开放状态。