我正在尝试使用runnable方法创建一个线程。代码在
下面public class NewClass implements Runnable{
public static void main(String[] agrg){
NewClass n =new NewClass();
n.start();
}
void start(){
Thread th=new Thread();
th.start();
}
@Override
public void run() {
System.out.println("Thread");
}
}
在这个覆盖方法中,我应该调用,但它没有发生
答案 0 :(得分:3)
您的run()
方法属于NewClass
,它不是线程,而是工作者。
因此,没有人会调用run()
NewClass
方法
在java中,当您通过实现Runnable
创建工作人员时,您应该仅覆盖run()
方法。并将此worker的实例传递给Thread,例如
new Thread(new NewClass()).start();
所以你可以做以下
public class NewClass implements Runnable{
public static void main(String[] agrg){
NewClass n =new NewClass();
n.start();
}
void start(){
Thread th=new Thread(this);
th.start();
}
@Override
public void run() {
System.out.println("Thread");
}
}
答案 1 :(得分:2)
您需要将Runnable
实例传递给Thread类构造函数。
在您的情况下,请将Thread th=new Thread();
替换为Thread th=new Thread(new NewClass())
。
使用Thread th=new Thread();
创建Thread类实例时,将调用Thread.run()方法的默认实现(不执行任何操作)。
因此,您需要覆盖正确完成的实现类(在您的情况下为NewClass)中的run()
方法。但是您还需要使用Thread th=new Thread(new NewClass())
答案 2 :(得分:1)
你正在开始一个新线程,但该线程实际上并没有做任何事情。新线程与启动它的类或类包含的代码没有任何关系。
实现Runnable时,通常通过创建一个以runnable作为参数的线程来执行它。
Runnable myRunnable = new NewClass();
Thread myThread = new Thread( myRunnable );`
myThread.start(); // will execute myRunnable.run() in background
或使用Executor。
Executor myExecutor = new SheduledThreadPoolExecutor(NUM_OF_PARALLEL_THREADS);
Runnable myRunnable = new NewClass();
myExecutor.execute(myRunnable); // will execute myRunnable.run() in background as soon as one of the parralel threads is available
答案 3 :(得分:0)
您的Thread类是与主类不同的类。
public class ThreadClass implements Runnable {
@Override
public void run() {
System.out.println("Thread");
}
}
public class MainClass {
public static void main(String[] agrg) {
ThreadClass t = new ThreadClass();
Thread th = new Thread(t);
th.start();
}
}
答案 4 :(得分:0)
如前所述,没有人可以运行你的“运行”方法。您可以扩展Thread并可以通过启动Thread
来请求run方法完成工作public class NewClass extends Thread{
public static void main(String[] agrg){
NewClass n =new NewClass();
n.start();
}
@Override
public void run() {
System.out.println("Thread");
}
}