再探SE——线程类的创建以及为什么大家都偏向实现Runnable接口

在JAVA中线程类的创建有三种方式。

一 继承Thread 类创建线程类

 

package com.vvan;

public class MyThread extends Thread {

    private int i=0;

    public void run(){
        for (; i<10; i++) {
            System.out.println(getName()+"   "+i);
        }
    }

    public static  void main(String[]args){
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+""+i);

            new MyThread().start();
            new MyThread().start();

        }

    }


}

main0
Thread-0   0
main1
Thread-1   0
Thread-0   1
Thread-0   2
Thread-1   1
Thread-1   2
Thread-1   3
Thread-1   4
Thread-1   5
Thread-2   0
main2
Thread-0   3
Thread-2   1

 两次new Thread 分别创建各自的Thread 实例,只能访问各自的实例变量i ,不能共享该实例变量。

二 实现Runnable 接口创建线程类

package com.vvan;

public class MyThread implements Runnable {

    private int i=0;

    public void run(){
        for (; i<10; i++) {
            System.out.println(Thread.currentThread().getName()+"  "+i);
        }
    }

    public static  void main(String[]args){

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

            MyThread myThread=new MyThread();
            new Thread(myThread,"我的一号线程").start();
            new Thread(myThread,"我的二号线程").start();
    }
}
main
我的二号线程  0
我的一号线程  0
我的二号线程  1
我的一号线程  2
我的二号线程  3
我的一号线程  4
我的二号线程  5
我的一号线程  6
我的二号线程  7
我的一号线程  8
我的二号线程  9

Process finished with exit code 0

 

在这里的线程对象依然是new Thread ,new MyThread(实现Runnable接口的自定义类) 只是作为new Thread的target,只创建类一次。被两个 new Thread 对象 共享使用。 

三 使用Callable 和future 创建线程

省略。。。。

 

 

问题:为什么更偏向实现Runnable 接口

答:1.Java的继承只能单继承,这意味着已经有父类的子类并不可以再继承Thread类来实现多线程机制

 2.实现Runnable接口的多线程类,可以共享类中同一个实例变量。更加符合使用多线程的业务需求

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值