我遇到多线程问题。警告是:“MenuThread类型的方法start()未定义”。我该怎么办
public void run() {
if (whichMethodToCall == 1) {
}
else if (whichMethodToCall == 2) {
}
}
答案 0 :(得分:4)
MenuThread正在实施Runnable
界面。它不是一个线程。如果它在另一个线程上运行,则将MyThread的实例传递给Thread对象
Thread thread = new Thread(new MenuThread(i));
thread.start();
答案 1 :(得分:0)
使用new Thread(thread).start()
。
答案 2 :(得分:0)
有问题的代码:
MenuThread thread = new MenuThread(i);
以上行创建MenuThread
,实现Runnable
接口。仍然不是一个线程,因此
thread.start();
是非法的。
从Runnable
实例
MenuThread thread = new MenuThread(i);
(new Thread(thread)).start();
您可以通过两种不同的方式创建线程。查看有关thread creation
的oracle文档创建Thread实例的应用程序必须提供将在该线程中运行的代码。有两种方法可以做到这一点:
Provide a Runnable object.
Runnable
接口定义了一个运行的方法,用于包含线程中执行的代码。 The Runnable object is passed to the Thread constructor
public class HelloRunnable implements Runnable {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}
Subclass Thread
。 Thread类本身实现了Runnable
,尽管它的run方法什么都不做。应用程序可以子类Thread
,提供自己的run
public class HelloThread extends Thread {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new HelloThread()).start();
}
}