gpt4 book ai didi

java - 如何让另一个线程在Java中 hibernate

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:19 26 4
gpt4 key购买 nike

我有一个扩展 Thread 的类。这个线程在运行时大部分时间都在 hibernate ,它会执行检查,如果为真则执行一个简单的 Action ,然后 hibernate 1/2 秒并重复。

该类还有一个公共(public)方法,可以被其他线程调用。如果调用此方法,我希望线程在已经处于 sleep 状态的情况下 sleep 更长时间,或者如果线程没有 sleep 则立即 sleep 。我试图让 this.sleep 但它似乎仍在 hibernate 当前线程并且它提示方法 sleep 是静态的并且应该静态访问。

这个程序显示了我的问题,当调用 CauseSleep 时,我希望它停止打印数字,直到 sleep 结束。

public class Sleeper {
public static void main(String[] args) {
new Sleeper();
}
public Sleeper() {
System.out.println("Creating T");
T t = new T();
System.out.println("Causing sleep");
t.CauseSleep();
System.out.println("Sleep caused");
}
public class T extends Thread {
public T() {
this.start();
}
public void run() {
for (int i = 0; i < 30; i++) {
System.out.println("T Thread: " + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
public void CauseSleep() {
try {
this.sleep(2000);
} catch (InterruptedException e) {
}
}
}
}

我得到的输出是

Creating T
Causing sleep
T Thread: 0
T Thread: 1
T Thread: 2
T Thread: 3
T Thread: 4
T Thread: 5
T Thread: 6
T Thread: 7
T Thread: 8
T Thread: 9
T Thread: 10
T Thread: 11
T Thread: 12
T Thread: 13
T Thread: 14
T Thread: 15
T Thread: 16
T Thread: 17
T Thread: 18
Sleep caused
T Thread: 19
T Thread: 20
T Thread: 21
T Thread: 22
T Thread: 23
T Thread: 24
T Thread: 25
T Thread: 26
T Thread: 27
T Thread: 28
T Thread: 29

最佳答案

你不能让另一个线程 hibernate 。 (您可以使用已弃用的 suspend() 方法,但请不要这样做)。这个电话:

this.sleep(200);

实际上会使当前正在执行的线程 hibernate ——而不是“this”引用的Threadsleep 是一个静态方法 - 好的 IDE 会在该行发出警告。

你应该有一个标志说“请 sleep ”,然后让 sleep 者线程在做任何工作之前检查那个标志。

您不能让另一个线程 hibernate 。假设它在一个同步方法中——这意味着你在 sleep 时持有一把锁,导致其他试图获取同一把锁的人被阻塞。不是什么好事。通过使用基于标志的系统,您可以以受控的方式休眠 - 在您知道不会造成伤害的时间点。

关于java - 如何让另一个线程在Java中 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1508278/

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