线程创建的两种方式及区别

来源:互联网 发布:淘宝营销策略 编辑:程序博客网 时间:2024/04/29 22:12

1、扩展Thread类

2、实现Runnable接口

3.两者区别

采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:
线程类只是实现了Runable接口,还可以继承其他的类。
可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。

Runnable可以实现资源共享但Thread不能原因:

因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。也就使得一个任务只能启动一个线程,不同的线程执行的任务是不相同的,所以没有必要,也不能让两个线程共享彼此任务中的资源。

一个任务可以启动多个线程,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。可以实例化多个 Thread对象,将同一任务传递进去,也就是一个任务可以启动多个线程来执行它。这些线程执行的是同一个任务,所以他们的资源是共享。

代码示例

package test;import java.io.IOException;/** *  * date: 2016年12月29日 下午3:11:53 *  * @author geyang */public class Test {    /**     * @param args     * @throws IOException     */    public static void main(String[] args) throws IOException {        // 第一种        Thread t = new Thread(new Test2());        t.start();        // 第二种        Thread t1 = new Thread(new Test3());        t1.start();    }}class Test2 implements Runnable {    public void run() {    }}class Test3 extends Thread {    public void run() {    }}
0 0