为什么我们必须创建一个类的实例并将它附加到新创建的线程对象,即使它们都在同一个类中?
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();
}
}
答案 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。