gpt4 book ai didi

java - sleep() 和 wait() 之间的混淆

转载 作者:行者123 更新时间:2023-11-30 08:51:37 24 4
gpt4 key购买 nike

<分区>

这是几个概念上的疑惑。

我在准备SCJP的时候在一本书上读到的

Just because a thread’s sleep() expires, and it wakes up, does not mean
it will return to running. It simply goes back to the runnable state.
So you can't rely on sleep() for an accurate timer.

假设我有线程 t1t2 以及一个对象 obj1

1) 我在 t1 上调用了 sleep() 5 秒,它正在 obj1 上做一些工作。 obj1 上的 t1 仍有一些待处理的工作要做。 sleep() 不会释放对 obj1 的锁定。同时 t2 正在尝试访问 obj1

但是如果不能保证t1会再次运行,会不会出现t2一直等待下去的情况呢?这样的情况能避免吗?

2) 如果 t1 正在根据其任务对 obj1 进行更改,并且在两者之间我调用 上的 wait() t1t2 介入并根据其工作对 obj1 进行更改。

t1 再次运行时,会一团糟,对吧?因为 obj1 的状态将是 t2 所做的任何事情,而 t1 将失去它在 wait 之前完成的所有工作() 被调用。

3) wait() 是一个非静态方法,那么如果一个线程引用了另一个线程,它会导致另一个线程等待吗?有什么例子可以理解这种应用吗?

4) 我还读到一些东西必须从同步上下文中调用 wait(),从同步上下文中调用 sleep() 是个坏主意.这两者的原因是什么?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com