两种线程对象产生线程方式的区别
? 在JAVA中,要开始一个线程,有两种方式:
? 一是直接调用Thread实例的start()方法;
? 二是将Runnable实例传给一个Thread实例然后调用它的start()方法。
?
? 线程对象和线程是两个完全不同的概念。生成一个线程的实例,并不代表启动了线程,而启动线程是说在某个线程对象上启动了该实例对应的线程,当该线程结束后,并不会就立即消失。
? 下面开始重点说说两种线程对象产生线程方式的区别。
? ?一个Thread的实例一旦调用start()方法,这个实例的started标记就标记为true,事实中不管这个线程后来有没有执行到底,只要调用了一次start()方法就再也没有机会运行了,这意味着:通过Thread实例的start(),一个Thread的实例只能产生一个线程。
? 那么如果要在一个实例上产生多个线程(也就是我们学说的线程池),我们就应该如何做呢?这就是Runnable接口给我们带来的伟大的功能。
?
public class TestThread { public static void main(String args[]) throws Exception{ for(int i=0;i<10;i++){ MyThread myThread = new MyThread(); myThread.start(); } Thread.sleep(10000); //让上面的经程运行完成 RunnableTest rt = new RunnableTest(); for(int i=0;i<10;i++){ Thread t = new Thread(rt); t.start(); } }}class MyThread extends Thread{ int x = 0; public void run(){ System.out.println("x==>"+(++x)); }}class RunnableTest implements Runnable{ int x = 0; public void run(){ System.out.println("xx==>"+(++x)); }}?运行结果如下:
x==>1
x==>1
x==>1
x==>1
x==>1
x==>1
x==>1
x==>1
x==>1
x==>1
xx==>1
xx==>2
xx==>3
xx==>6
xx==>8
xx==>4
xx==>5
xx==>10
xx==>9
xx==>7
?
上面10个线程对象产生的10个线程运行时打印了10次1.下面10个线程对象产生的10个线程运行时打印了1到10.我们把下的10个线程称为同一实例(Runnable实例)的多个线程。