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()
需要一个参数,比如,睡眠时间
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();
}
}