在java中使用runnable接口实现线程

时间:2014-10-20 11:23:16

标签: java

为什么我们必须创建一个类的实例并将它附加到新创建的线程对象,即使它们都在同一个类中?

import java.io.*;
class thread1 implements Runnable{

   public void run(){
       System.out.println("thread started");
   }

   public static void main(String args[]) throws Exception{
      Thread t1=new Thread(new thread1());
      t1.start();
   }
}

3 个答案:

答案 0 :(得分:1)

您不必创建Runnable即可在新线程中执行自定义代码。也可以直接创建线程的子类。

public class WorkerThread extends Thread{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();
        // DO SOMETHING
    }

}

public class MainClass {
    public static void main(String[] args){
        new WorkerThread().start();

        MainClass mc = new MainClass();
        mc.startThread();
    }

    private void startThread(){
        Thread t = new WorkerThread();
        t.start();
    }
}

答案 1 :(得分:1)

我认为你有两个问题:

1。)如何在Java中使用Thread? Fizer Khan的答案就是一个例子。

2.。)静态方法如何在java中工作?如果你有一个静态的方法,那么你就是说“静态层”。您没有“此”参考,因为此图层上没有对象。只有在创建实例时,才能访问此对象上的实例字段和非静态方法。 如果添加第二个静态方法,则可以执行与main方法相同的操作,因为两者都是静态的。这是对这个问题的粗略看法:https://stackoverflow.com/questions/18402564/how-do-static-methods-work

pulblic class Thread1 implements Runnable{ //name should be upper case

public void run(){
    System.out.println("thread started");
}

public static void main(String args[]) throws Exception{ //static method
   Thread t1=new Thread(new Thread1()); //t1 is a local reference to an object on the heap - no specil magic here
   t1.start(); //call to an "instance" method, can only be performed on an object.
}

答案 2 :(得分:0)

有两种方法可以编写线程。

public class ThreadX implements Runnable {
    public void run() {
        //Code
    }
}
/* with a "new Thread(new ThreadX()).start()" call */


public class ThreadY extends Thread {
    public ThreadY() {
        super("ThreadY");
    }
    public void run() {
        //Code
    }
}
/* with a "new ThreadY().start()" call */

public class MainClass {
    private Thread threadX = new Thread(new ThreadX());
    private Thread threadY = new ThreadY();

    public static void main(String[] args){
        // Call threads
        threadX.start();
        threadY.start();

        // some more threads
        new Thread(new ThreadX()).start();
        new ThreadY().start();
    }
}

扩展线程时,通常会扩展一个类来添加或修改功能。因此,如果您不想覆盖任何线程行为,请使用Runnable。