您的位置:首页 > 编程语言 > Java开发

Java线程的创建与启动(1)

2017-09-11 16:56 267 查看
从Thread的构造方法,就可以看出创建一个线程的方式:

Thread()


          分配新的 
Thread
 对象。
Thread(Runnable target)


          分配新的 
Thread
 对象。
Thread(Runnable target,String name)


          分配新的 
Thread
 对象。
Thread(String name)


          分配新的 
Thread
 对象。
Thread(ThreadGroup group,Runnable target)


          分配新的 
Thread
 对象。
Thread(ThreadGroup group,Runnable target,String name)


          分配新的 
Thread
 对象,以便将 
target
 作为其运行对象,将指定的 
name
 作为其名称,并作为 
group
 所引用的线程组的一员。
Thread(ThreadGroup group,Runnable target,String name,
long stackSize)


          分配新的 
Thread
 对象,以便将 
target
 作为其运行对象,将指定的 
name
 作为其名称,作为 
group
 所引用的线程组的一员,并具有指定的堆栈大小。
Thread(ThreadGroup group,String name)


          分配新的 
Thread
 对象。
后面4个构造方法创建一个线程并加入到一个线程组中,但是创建线程的方式和前面的相似。

java中创建一个线程有两种方式:

1、继承Thread类,重写run()方法,然后直接new这个对象的实例,创建一个线程的实例。然后调用start()方法启动线程

2、实现Runnable接口,重写run()方法,然后调用new Thread(runnable)的方式创建一个线程,然后调用start()方法启动线程

其实看Thread的源文件,发现它也是实现了Runnable接口的。

[java] view
plain copy

public
4000
 class Thread implements Runnable   

1、继承Thread类的方式

[java] view
plain copy

public class Test1 {  

    public static void main(String[] args) {  

        System.out.println(Thread.currentThread().getName());  

        MyThread myThread=new MyThread();  

        myThread.start();  

    }  

}  

class MyThread extends Thread{  

    int i=0;  

    @Override  

    public void run() {  

        while (i<10) {  

            System.out.println(this.getName()+"    i的值   "+i);  

            i++;  

        }  

    }  

}  

2、实现Runnable接口

[java] view
plain copy

public class Test1 {  

    public static void main(String[] args) {  

        System.out.println(Thread.currentThread().getName());  

        Thread thread=new Thread(new MyRunnable());  

        thread.start();  

    }  

}  

class MyRunnable implements Runnable{  

    int i=0;  

    @Override  

    public void run() {  

        while (i<10) {  

            System.out.println(Thread.currentThread().getName()+"    i的值   "+i);  

            i++;  

        }  

    }  

}  

注意:

①、在继承Thread的方式中,可以使用getName()方法,来获得当前线程的名字,这是因为在Thread类中,有这个方法。可是在实现Runnable方式中,却不可以使用this.getName(),因为Runnable接口没有这个方法(可以看出来,因为我们没有提示我们需要重写这个方法),所以只能通过Thread的静态方法Thread.currentThread()取得当前的Thread对象,在调用getName()方法,来取得当前线程的名字。

②、对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。只有调用start()方法才会启动新线程。

两种方式的优缺点对比:

采用实现Runnable接口方式的多线程具有优势,一般都会使用这种方式:

1、线程类只是实现了Runnable接口,还可以继承其他类。

2、在这种方式下,可以多个线程共享一个Runnable target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好的体现了面向对象的思想。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Thread