Thread.sleep的Java多线程作用域

Thread.sleep的Java多线程作用域,java,multithreading,concurrency,scope,sleep,Java,Multithreading,Concurrency,Scope,Sleep,根据甲骨文的: Thread.sleep使当前线程在指定的时间段内暂停执行 我想知道什么是当前线程。 我有一个名为Function的简单接口: public interface Function { public abstract void run(TomVM vm); } 以及包含函数实例以及嵌套SwingWorker和函数类的类: public class MyApp{ //Function that will be called by a SwingWorker

根据甲骨文的:

Thread.sleep使当前线程在指定的时间段内暂停执行

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

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

public interface Function {
    public abstract void run(TomVM vm);
}
以及包含函数实例以及嵌套SwingWorker和函数类的类:

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将调用的函数
函数myFunction;
//将调用函数的run()成员的工作线程
我的工人我的工人;
公开作废开始(){
//初始化函数
myFunction=new WrapSleep();//调用sleep的对象
//启动工作线程
myWorker=新的myWorker();
myWorker.execute();
}
私有类MyWorker扩展SwingWorker{
@凌驾
受保护对象doInBackground()引发异常{
//这里通常会有一个循环来调用
//运行函数列表
//运行任意函数对象
myFunction.run();//在本例中为WrapSleep.run()
}
}
//睡一段时间
公共final类WrapSleep实现函数{
公开募捐{
试一试{
线程。睡眠(5000)
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
//显示消息
公共final类WrapPrint实现函数{
@凌驾
公开募捐{
showMessageDialog(null,“Hello World”);
}   
}   
}
在实际的应用程序MyApp中,将显示一个窗口并执行SwingWorker,它驱动一个解释基本语言编译代码的虚拟机。将有更长的函数列表,以及告诉虚拟机要调用哪些函数的指令列表。 根据用户的输入,WrapSleep.run()后面可以跟任意数量的WrapPrint.run()调用。据我所知,VM在正确解释用户代码方面发挥了应有的作用


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


由于WrapSleep实例不是MyWorker的成员,并且它不是由线程初始化的,因此在MyWorker中调用WrapSleep.run()是否仅起回调作用,并且只会导致线程WrapSleep在中初始化为睡眠?-允许MyWorker.doInBackground()在不暂停的情况下完成


我希望SwingWorker没有函数成员,但我需要在什么范围内定义函数列表,以便Thread.sleep()使SwingWorker正常睡眠?或者我的假设是不正确的,即初始化函数的线程正在休眠?

当前线程是调用
thread.sleep()的线程。

不神秘

或者我的假设是错误的,即初始化函数的线程正在休眠


是的,它是不正确的。

EJP的答案是正确的,但是请注意,不管怎样,整个程序和GUI功能都将在代码中休眠。类必须使用Runnable实现,才能使其成为新线程。要执行此新线程,您需要使用

new Thread(new MyClass()).start;
其中MyClass如下所示:

public class MyClass implements Runnable {
     @Override
     public void run() {
     // Some Code
     Thread.sleep(500);
     }

在java中,每条语句都在一个线程中运行。默认情况下,在独立java程序中,它从主线程开始,您可以从主线程开始新线程。其中调用了thread
thread.sleep()
语句,该语句将睡眠。谢谢,我能够更好地缩小问题的范围