Java 为什么不调用run方法? 包线; 公共类WorkingWithThreads实现可运行{ 公共静态void main(字符串[]args){ WorkingWithThreads wwt=新的WorkingWithThreads(); } 公共工作线程(){ System.out.println(“创建线程”); 螺纹t=新螺纹(); System.out.println(“起始线程”); t、 start(); } @凌驾 公开募捐{ System.out.println(“线程运行”); 对于(int i=0;i
当我运行这段代码时,它会打印创建线程和启动线程。但不打印正在运行的线程,这意味着根本不调用run函数。为什么会这样?您必须在线程上调用Java 为什么不调用run方法? 包线; 公共类WorkingWithThreads实现可运行{ 公共静态void main(字符串[]args){ WorkingWithThreads wwt=新的WorkingWithThreads(); } 公共工作线程(){ System.out.println(“创建线程”); 螺纹t=新螺纹(); System.out.println(“起始线程”); t、 start(); } @凌驾 公开募捐{ System.out.println(“线程运行”); 对于(int i=0;i,java,multithreading,runnable,Java,Multithreading,Runnable,当我运行这段代码时,它会打印创建线程和启动线程。但不打印正在运行的线程,这意味着根本不调用run函数。为什么会这样?您必须在线程上调用start(),才能启动它;e、 g package threadwork; public class WorkingWithThreads implements Runnable { public static void main(String[] args) { WorkingWithThreads wwt = new Workin
start()
,才能启动它;e、 g
package threadwork;
public class WorkingWithThreads implements Runnable {
public static void main(String[] args) {
WorkingWithThreads wwt = new WorkingWithThreads();
}
public WorkingWithThreads() {
System.out.println("Creating Thread");
Thread t = new Thread();
System.out.println("Starting Thread");
t.start();
}
@Override
public void run() {
System.out.println("Thread Running");
for (int i = 0; i < 5; i++) {
System.out.println("Thread:" + i);
try {
Thread.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
如果您正在扩展Thread
,您将创建一个新线程,并对其调用start()
,如下所示:
Thread t = new Thread();
t.start();
new Thread(new WorkingWithThreads()).start();
由于您没有扩展线程
,但您的类实现了可运行
:
new MyThread().start();
如果我站在你的立场上,我会在main内部开始线程,如下所示:
Thread t = new Thread();
t.start();
new Thread(new WorkingWithThreads()).start();
将用于使用线程工作的构造函数保留为空:
public static void main(String[] args) {
WorkingWithThreads wwt = new WorkingWithThreads();
System.out.println("Creating Thread");
Thread tzero = new Thread(wwt);
System.out.println("Starting thread");
tzero.start();
}
一般来说,在构造函数中为使用线程
创建线程
不是一个好主意,因为runnable(即使用线程
的实例)必须在传递给线程
的实例之前完全构造好,忘了在这里写了。您需要创建扩展线程的类的实例。请参见回答中的编辑。我不是在扩展线程,而是在实现可运行接口。大体上,我已经创建了实现Runnable接口的类的实例。在实现RunnableIt时,请再次参阅我答案中的edit,但现在我有一个疑问。在创建线程之前,我将最后一段代码放在线程t=new thread()之前。现在run只被调用一次,为什么呢,我这里有两个线程,并且调用start方法两次。