start()方法则不同,它首先做了创建线程等一系列工作,然后调用行的run()方法
新建线程
Thread thread = new Thread();
thread.start();
这样就开启了一个线程。
有一点需要注意的是
Thread thread = new Thread();
thread.run();
直接调用run方法是无法开启一个新线程的。
start方法其实是在一个新的操作系统线程上面去调用run方法。换句话说,直接调用run方法而不是调用start方法的话,它并不会开启新的线程,而是在调用run的当前的线程当中执行你的操作。
Thread thread = new Thread("t1")
{
@Override
public void run()
{
// TODO Auto-generated method stub
System.out.println(Thread.currentThread().getName());
}
};
thread.start();
如果调用start,则输出是t1
Thread thread = new Thread("t1")
{
@Override
public void run()
{
// TODO Auto-generated method stub
System.out.println(Thread.currentThread().getName());
}
};
thread.run();
如果是run,则输出main。(直接调用run其实就是一个普通的函数调用而已,并没有达到多线程的作用)