Java学习提要——浅述'Thread类'和'Runnable接口'的区别

使用Runnable接口与Thread类相比,解决了单继承的局限,仅仅这一点,就让Runnable接口的应用多得多了

1.
观察Thread类的定义:
public class Thread extends Object implements Runnable
这种结构如果画图分析的话,非常像代理设计模式,但是又不是,因为客户端调用代理类的方法,不是接口里提供的方法,也就是run()方法。

2.
Runnable接口和Thread类都可以描述数据共享,但是Runnable接口更适合多个相同的程序代码的线程去处理同一个资源的操作
数据共享,即多个线程访问同一资源的操作,
例:

//Thread类
class MyThread extends Thread{
    private int ticket = 10 ;
    public void run() {
        for (int x=0 ; x < 100 ; x++){
            if(this.ticket > 0) {
                    System.out.println("ticket =" + this.ticket--);
            }
        }
    }
}
public class Nice {
    public static void main(String args[]) {
        //每一个类都有start()方法,所以每一个类对象就是一个线程对象,可以直接启动
        MyThread mt1 = new MyThread();
        MyThread mt2 = new MyThread();
        MyThread mt3 = new MyThread();
        mt1.start() ;  
        mt2.start() ;
        mt3.start() ;
        //若是三个名称一样,那么会有异常抛出
    }
}
//三个类的对象,分别调用三次start()方法,但是发现每一个线程都是买自己的10张票,没有资源共享
//Runnable接口
class MyThread implements Runnable {
    private int ticket = 10 ;
    public void run() {
        for (int x=0 ; x < 100 ; x++){
            if(this.ticket > 0) {
                System.out.println("ticket =" + this.ticket--);
            }
        }
    }
}
public class Nice {
    public static void main(String args[]) {
        MyThread mt = new MyThread();
        new Thread(mt).start() ;  //Thread类不可以这样,因为它本身就是Thread,不需要这样调用
        new Thread(mt).start() ;
        new Thread(mt).start() ;
    }
}
//此时也属于三个线程对象,区别是,这三个线程对象都直接占用了MyThread类对象引用,即他们都直接访问同一个资源

解释Thread类与Runnable接口实现多线程的区别?(面试题:解释多线程两种实现方式的区别?)

1. Thread类是Runnable接口的子类,使用Runnable接口可以避免单继承局限
2. Runnable接口实现的多线程,可以比Thread类实现的多线程更加清楚的描述数据共享的概念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值