我遇到过这个问题而我无法找到一个好的答案。
在Java中,我可以通过两种方式创建一个线程:
1.实现Runnable接口
public class RunnableInstance implements Runnable {
public void run() {
// functionality goes here
}
}
创建的新线程如下:
public class Client {
public static void main(String[] args) {
RunnableInstance runnableInstance = new RunnableInstance();
Thread thread1 = new Thread(runnableInstance);
thread1.start();
}
}
使用此方法的优点:
run()
中编写的功能不需要作为单独的线程运行,我可以直接使用它而无需创建线程。2.扩展Thread类:
public class ThreadInstance extends Thread {
ThreadInstance() {
super("myThread");
}
public static void main(String[] args) {
new ThreadInstance().start();
}
}
从使用Runnable的优点可以看出:
Thread类本身实现Runnable接口并提供run()的空实现。
我找到了一些答案 一个。当我们确定只是异步执行的事情时,我们可以在这种情况下遵循这种方法。
湾我们可以在RunnableInstance的run()
中定义作业,然后通过将Runnable实例附加到线程来异步执行。
OR
我们可以通常在需要时调用run()
方法来执行run()
内的代码。
在这种情况下,如果我知道我必须正常执行一个方法,为什么我要实现Runnable然后在run()
中定义我的功能?我可以在任何地方做到。
在Java中提供这两种创建线程的方法实际上是什么原因?
人们可能会发现它重复,但我找不到令人信服的答案。为什么有两种方式,当Runnable更干净的方式?如果我不必在线程中使用它,为什么我会在run()中实现Runnable并编写我的代码。除了上面描述的内容之外,实际上让他们提供了这两种方式。