如果线程是实现Runnable
接口的,则调用Thread
类的run()
方法,否则此方法不执行任何操作并返回。 当run()
方法调用时,将执行run()
方法中指定的代码。可以多次调用run()
方法。
可以使用start()
方法或通过调用run()
方法本身来调用run()
方法。 但是当使用run()
方法调用自身时,它会产生问题。
示例1: 使用start()
方法调用run()
方法
public class RunExp1 implements Runnable
{
public void run()
{
System.out.println("Thread is running...");
}
public static void main(String args[])
{
RunExp1 r1=new RunExp1();
Thread t1 =new Thread(r1);
// this will call run() method
t1.start();
}
}
执行上面示例代码,得到以下结果:
Thread is running...
示例2 :使用run()
方法本身调用run()
方法
public class RunExp2 extends Thread
{
public void run()
{
System.out.println("running...");
}
public static void main(String args[])
{
RunExp2 t1=new RunExp2 ();
// It does not start a separate call stack
t1.run();
}
}
执行上面示例代码,得到以下结果:
running...
在这种情况下,它转到当前的调用堆栈而不是新调用堆栈的开头。
示例3:多次调用run()
方法
public class RunExp3 extends Thread
{
public void run()
{
for(int i=1;i<6;i++)
{
try
{
Thread.sleep(500);
}catch(InterruptedException e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[])
{
RunExp3 t1=new RunExp3();
RunExp3 t2=new RunExp3();
t1.run();
t2.run();
}
}
执行上面示例代码,得到以下结果:
1
2
3
4
5
1
2
3
4
5
在上面的例子3 中,没有内容切换,因为这里t1
和t2
被视为普通对象而不是线程对象。