Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java线程未睡眠_Java_Multithreading - Fatal编程技术网

Java线程未睡眠

Java线程未睡眠,java,multithreading,Java,Multithreading,我有以下代码(完整源代码):- Thread中的sleep方法是静态的,因此应该将其称为Thread.sleep(),它实际上使当前正在执行的线程处于睡眠状态,而不是调用该方法的特定线程实例。这里的基本问题是,您永远不会启动线程。在默认线程上调用程序的main,您创建一个实例,然后对其不做任何操作 如果要启动线程,请调用t.start()(一次)。这将启动线程,该线程将与JVM在运行程序时创建的默认线程一起运行。除了两个线程同时运行之外,它们在您的程序中不进行交互,因此您仍然可以看到数字立即打印

我有以下代码(完整源代码):-


Thread
中的
sleep
方法是静态的,因此应该将其称为
Thread.sleep()
,它实际上使当前正在执行的线程处于睡眠状态,而不是调用该方法的特定线程实例。

这里的基本问题是,您永远不会启动线程。在默认线程上调用程序的
main
,您创建一个实例,然后对其不做任何操作

如果要启动线程,请调用
t.start()
(一次)。这将启动线程,该线程将与JVM在运行程序时创建的默认线程一起运行。除了两个线程同时运行之外,它们在您的程序中不进行交互,因此您仍然可以看到数字立即打印出来。根据您试图执行的操作,您可能希望将循环从
main
移动到
run

(是的,
sleep
是一个静态方法,它使当前线程处于睡眠状态。在Java中,通过实例引用调用静态方法在语法上是有效的,但这不是一个好主意。)

例如,这是一个具有最小mod的类(注意:您的环境似乎创建了一个实例,并调用下面特定于实例的
main
,这是非标准的,但我将其放在一边,因为它似乎是您的环境所做的):


您的代码应该更像这样。我已经有一段时间没有处理线程了,所以可能会有一些小错误,人们可以随意编辑

class myThread implements Runnable
{
    public void main(){
        MyThread t= new MyThread();
        t.start();
        t.join();
    }

    public void run(){
        try{
            for(i=0;i<=5;i++){
                System.out.println(i);
                Thread.sleep(1000); 
            }
        }
        catch(InterruptedException e){
        }
    }
}
myThread类实现可运行
{
公共图书馆{
MyThread t=新的MyThread();
t、 start();
t、 join();
}
公开募捐{
试一试{

对于(i=0;i您没有启动线程…另外,
sleep
是一个
static
方法。谁调用了您的“main”方法,这不是公共静态void main我正在用blueJ编写这个程序,我正在运行main方法@RamonBoza@SotiriosDelimanolis当我使用
t.start()时在循环中,我得到以下错误->
java.lang.IllegalThreadStateException在java.lang.Thread.start(Thread.java:682)在Thread.main(Thread.java:7)
运行时,您可以只启动一次Thread。完美的答案,Indeed您的代码也不会等待1秒…我所做的是在循环中(在main方法中),我把这个->
run()
而且它是有效的!@BenLind:你从来不会直接调用线程的
run
方法或
Runnable
方法;当你运行线程时,它是隐式调用的。如果你直接调用
run
方法,你会在当前线程上执行该方法,而不是在新线程上执行该方法。我不知道你对上面的代码的意思是什么,不等待一秒钟;它会自动执行oes.Proof:您可以使用更大的时间值进行检查当您调用run()时,您不是在运行线程,您只是在调用一个方法。请尝试在t.start()之后添加t.join();以告诉您的程序在退出之前等待线程完成执行。
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:682)
at thread.main(thread.java:7)
class ThreadExample implements Runnable
{
    public void main(){
        Thread t= new Thread(this);
        t.start();
    }

    public void run(){
        int i;

        try{
            Thread.sleep(1000); 
            for(i=0;i<=5;i++){
                System.out.println(i);
            }
        }
        catch(InterruptedException e){
        }
    }
}
class ThreadExample implements Runnable
{
    public static void main(String[] args) {
        Thread t = new Thread(new ThreadExample());
        t.start();
    }

    public void run(){
        int i;

        try{
            Thread.sleep(1000); 
            for(i=0;i<=5;i++){
                System.out.println(i);
            }
        }
        catch(InterruptedException e){
        }
    }
}
class myThread implements Runnable
{
    public void main(){
        MyThread t= new MyThread();
        t.start();
        t.join();
    }

    public void run(){
        try{
            for(i=0;i<=5;i++){
                System.out.println(i);
                Thread.sleep(1000); 
            }
        }
        catch(InterruptedException e){
        }
    }
}