读书人

两种线程对象发生线程方式的区别

发布时间: 2012-10-27 10:42:26 作者: rapoo

两种线程对象产生线程方式的区别

? 在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实例)的多个线程。

读书人网 >编程

热点推荐