我正在运行一个非常简单的多线程程序
主程序
package javathread;
public class JavaThread {
public static void main(String[] args)
{
JThread t1 = new JThread(10,1);
JThread t2 = new JThread(10,2);
t1.run();
t2.run();
}
}
JThread.java
package javathread;
import java.util.Random;
public class JThread implements Runnable
{
JThread(int limit , int threadno)
{
t = new Thread();
this.limit = limit;
this.threadno = threadno;
}
public void run()
{
Random generator = new Random();
for (int i=0;i<this.limit;i++)
{
int num = generator.nextInt();
System.out.println("Thread " + threadno + " : The num is " + num );
try
{
Thread.sleep(100);
}
catch (InterruptedException ie)
{
}
}
}
Thread t;
private int limit;
int threadno;
}
我希望两个线程同时/并行运行,类似于这张图片
相反,我得到的是线程1首先运行然后线程2运行
有人可以向我解释为什么会发生这种情况吗?
如何让线程同时运行?
答案 0 :(得分:5)
因为您拨打了t1.run()
和t2.run()
而不是t1.start()
和t2.start()
。
如果您拨打run
,则只是正常的方法调用。它就像任何方法一样,直到它完成后才会返回。它不会同时运行任何东西。 run
绝对没有什么特别之处。
start
是&#34;魔法&#34;您调用以启动另一个线程并在新线程中调用run
的方法。 (顺便说一下,调用start
也是一种正常的方法调用。它是start
内的代码,可以实现神奇的效果)
答案 1 :(得分:2)
请浏览Life Cycle of a Thread
。
答案 2 :(得分:1)
你没有在线程上运行任何东西,你只需运行Runnable(你的JThread不是一个线程,它只是一个无法使用)。 要在线程上运行,您需要执行以下操作:
new Thread(myRunnable).start();
在Runnable中创建线程什么也不做(就像你在JThread构造函数中所做的那样)。
答案 3 :(得分:0)
因为你应该start()
线程,不 run()
它。