Java 类实现Runnable,但未定义start()和sleep()方法

Java 类实现Runnable,但未定义start()和sleep()方法,java,multithreading,interface,sleep,runnable,Java,Multithreading,Interface,Sleep,Runnable,我创建了一个名为Thread的类,它实现了Runnable,但由于某些原因,我无法调用start()或sleep()方法。每当我尝试这样做时,我都会收到错误消息,说这些方法对于类是未定义的,并建议我创建它们。因此,我创建了一个新项目并复制了一个示例代码,以查看我自己的代码是否有问题,我收到了相同的错误。以下是示例代码: class Thread implements Runnable { private int a; public Thread (int a) {

我创建了一个名为
Thread
的类,它实现了
Runnable
,但由于某些原因,我无法调用
start()
sleep()
方法。每当我尝试这样做时,我都会收到错误消息,说这些方法对于类是未定义的,并建议我创建它们。因此,我创建了一个新项目并复制了一个示例代码,以查看我自己的代码是否有问题,我收到了相同的错误。以下是示例代码:

class Thread implements Runnable {
    private int a;
    public Thread (int a) {
        this.a = a;
    }
    public void run() {
        for (int i = 1; i <= a; ++i) {
            System.out.println(Thread.currentThread().getName() + " is " + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {}
        }
    }
}

要修复当前错误,只需将
Thread
类重命名为
MyThread
(或其他),因为
Thread
类隐藏了
java.lang.Thread

如果要坚持使用
Thread
,则必须使用
java.lang.Thread
的完全限定名,如下所示:

try{
    java.lang.Thread.sleep(1000);
    // ...

错误

  • 将类名从
    Thread
    更改为
    MyThread
  • 调用
    start()
    时调用
    run()
    。使用类对象调用
    start()
  • Thread.sleep()
    需要一个参数,比如,
    睡眠时间
  • 这是我认为你想做的事情的代码。在EclipseJunoJDK1.7上测试

    import java.util.Random;
    
    class NewThread implements Runnable {
    
        public NewThread () {
        }
        public void run() {
            Random gen = new Random();           // Generates random values
            int sleepTime;                       // Sleep time
            sleepTime = gen.nextInt(60 - 1) + 1; // Generates random sleep time between 1 and 60 seconds
    
            try {
                Thread.sleep(sleepTime);
            } catch (Exception e) {
                System.out.println(e);
            } 
            System.out.println("The thread has been terminated");
        }
    }
    
    class MyThread {
    
        public static void main(String[] args) {
            NewThread t = new NewThread();
            Thread t1 = new Thread(t);
            t1.start();
    
        }
    }
    
    输出


    线程已终止

    接口可运行。没有方法start()和sleep(),因此请小心使用。接口Runnable只包含run()方法,Java API建议“如果您只计划重写run()方法,而不打算重写其他线程方法,则应使用Runnable接口。” 请参见此处的Java API可运行文档:

    在其他情况下,您的类应该扩展类线程。

    您正在用自己的
    线程
    类隐藏
    线程
    类。将您的类重命名为MyThread或其他任何名称,错误将消失。@jlordo:将其作为答案发布。@jlordo非常有意义。非常感谢你!就像很多问题一样,这让我想知道为什么OP决定这么做。@jlordo:lol抱歉,我是个新手。你的回答被接受了!
    import java.util.Random;
    
    class NewThread implements Runnable {
    
        public NewThread () {
        }
        public void run() {
            Random gen = new Random();           // Generates random values
            int sleepTime;                       // Sleep time
            sleepTime = gen.nextInt(60 - 1) + 1; // Generates random sleep time between 1 and 60 seconds
    
            try {
                Thread.sleep(sleepTime);
            } catch (Exception e) {
                System.out.println(e);
            } 
            System.out.println("The thread has been terminated");
        }
    }
    
    class MyThread {
    
        public static void main(String[] args) {
            NewThread t = new NewThread();
            Thread t1 = new Thread(t);
            t1.start();
    
        }
    }