Java线程创建

时间:2014-06-03 08:12:07

标签: java multithreading

我正在尝试使用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");
      }
}

在这个覆盖方法中,我应该调用,但它没有发生

5 个答案:

答案 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())

为Thread类构造函数指定实现类实例

答案 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");
    }

}