gpt4 book ai didi

Java多线程作用域Thread.sleep

转载 作者:行者123 更新时间:2023-11-30 03:31:17 24 4
gpt4 key购买 nike

根据 Oracle 的 documentation for Thread.sleep :

Thread.sleep causes the current thread to suspend execution for a specified period.

我想知道什么被认为是当前线程。

我有一个名为 Function 的简单接口(interface):

public interface Function {
public abstract void run(TomVM vm);
}

以及一个包含 Function 实例以及嵌套 SwingWorker 和 Function 类的类:

public class MyApp{
//Function that will be called by a SwingWorker
Function myFunction;
//Worker thread that will call the run() member of Functions
MyWorker myWorker;


public void start(){
//Initialize functions
myFunction = new WrapSleep(); //Object that calls sleep

//Start worker thread
myWorker = new MyWorker();
myWorker.execute();

}

private class MyWorker extends SwingWorker<Object, Object>{

@Override
protected Object doInBackground() throws Exception {
//There would normally be a loop here to call
//run for a list of Functions

//Have an arbitrary Function object run
myFunction.run(); //In this case WrapSleep.run()

}

}

//Sleep for a period of time
public final class WrapSleep implements Function {
public void run() {
try {
Thread.sleep(5000)
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

//Display a message
public final class WrapPrint implements Function{

@Override
public void run() {
JOptionPane.showMessageDialog(null, "Hello World");
}
}
}

在实际的应用程序 MyApp 中,将显示一个窗口并执行 SwingWorker,该 SwingWorker 驱动一个虚拟机,该虚拟机解释基本语言的编译代码。将会有一个更长的函数列表,以及告诉虚拟机要调用哪些函数的指令列表。根据用户的输入,WrapSleep.run() 后面可能会跟随任意数量的 WrapPrint.run() 调用。据我所知,虚拟机在正确解释用户代码方面发挥了应有的作用。

<小时/>

我遇到的问题是,当调用 WrapSleep.run() 时,应用程序的行为就像 VM 已成功完成一样,但没有显示通常由 WrapPrint.run() 显示的消息,也没有长时间暂停时间。

<小时/>

由于 WrapSleep 的实例不是 MyWorker 的成员,并且它不是由线程初始化的,因此在 MyWorker 中调用 WrapSleep.run() 是否仅起到回调作用,并且仅导致线程 WrapSleep 被初始化为 sleep 状态? - 允许 MyWorker.doInBackground() 无需暂停即可完成

我希望 SwingWorker 没有 Function 成员,但是我需要在什么范围内定义 Functions 列表,以便 Thread.sleep() 导致 SwingWorker 正常 sleep ?或者我的假设是错误的,即初始化函数的线程正在 hibernate ?

最佳答案

“当前线程”是正在调用 Thread.sleep(). 的线程

没什么神秘的。

Or is my assumption incorrect that the thread where the function is initialized is sleeping?

是的,这是错误的。

关于Java多线程作用域Thread.sleep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28958154/

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