【发布时间】:2014-05-28 09:00:24
【问题描述】:
当我想到一个问题时,我正在研究线程。如果我们可以像任何普通方法一样直接使用类的对象调用 run() 方法,那么为什么我们需要调用 Thread.start() 来调用run() 方法..我尝试了如图所示的两种方法并得到了相同的结果
第一次尝试直接调用run()方法
class Abc extends Thread
{
public void run()
{
for(int i=0;i<5;i++)
{
System.out.println("Abc");
}
try
{
Thread.sleep(100);
}catch(Exception e)
{
System.out.println("Error : "+ e);
}
}
}
class Xyz extends Thread
{
public void run()
{
try
{
for(int i=0;i<5;i++)
{
System.out.println("Xyz");
}
Thread.sleep(100);
}catch(Exception e)
{
System.out.println("Error : "+ e);
}
}
}
public class ThreadDemo
{
public static void main(String[] args)
{
Abc ob=new Abc();
Xyz oc=new Xyz();
ob.run();
oc.run();
}
}
通过调用 Thread.start() 进行第二次尝试
public class ThreadDemo
{
public static void main(String[] args)
{
Abc ob=new Abc();
Xyz oc=new Xyz();
Thread t1,t2;
t1=new Thread(ob);
t2=new Thread(oc);
t1.start();
t2.start();
}
}
【问题讨论】:
-
thread.start() 开始一个新的堆栈调用但是如果你尝试直接调用 run 那么它将在当前正在执行的调用堆栈下被调用,即 main 本身......
标签: java multithreading thread-sleep