Thread和Runnable的区别

1、继承Thread类

/**
 * 线程类
 * @author
 * @date 2018/7/31 16:04
 */
public class MyThread extends Thread {

    private String name;

    public MyThread(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 8; i++) {
            System.out.println("name=" +name+":"+ i);
        }
    }
}
/**
 * 测试类
 * @author limh
 * @date 2018/7/31 16:07
 */
public class TestMain {

    public static void main(String[] args){

        //新建线程
        MyThread t1 = new MyThread("A");
        MyThread t2 = new MyThread("B");

        //启动线程
        t1.start();
        t2.start();
    }
}

2、实现Runnable接口

若是一个类继承Thread,则不适合资源共享。可是若是实现了Runnable接口的话,则很容易的实现资源共享java

/**
 * Runnable类
 * @author
 * @date 2018/7/31 16:15
 */
public class MyThread1 implements Runnable {

    private int ticket = 10;

    @Override
    //公共资源,要在run方法以前加上synchronized,要否则会出现抢资源的状况
    public synchronized void run() {
        for (int i=0;i<10;i++){
            if (this.ticket > 0){
                System.out.println("卖票:ticket"+this.ticket--);
            }
        }
    }
}
/**
 * 测试类
 * @author limh
 * @date 2018/7/31 16:07
 */
public class TestMain {

    public static void main(String[] args){

        //测试Runnable
        MyThread1 t1 = new MyThread1();

        //同一个t1,资源共享。若是不是同一个,则达不到该效果
        new Thread(t1).start();
        new Thread(t1).start();
        new Thread(t1).start();
    }
}

运行结果

3、总结

实现Runnable接口比继承Thread类所具备的优点:ide

  1. 适合多个相同的程序代码的线程去处理同一个资源
  2. 能够避免java中的单继承的限制
  3. 增长程序的健壮性,代码能够被多个线程共享,代码和数据独立。
相关文章
相关标签/搜索