多线程两种实现方式的区别Thread Runnable

多线程两种实现方式的区别

多线程的两种实现方式 Thread Runnable 两者的区别

首先:使用Runnable接口与Thread类相比较,解决了单根继承的定义局限性,所以不管后面的区别和联系是什么,至少这一点上就已经下了死定义– 如果要使用一定是用Runnable接口!

     观察Thread类的定义

public class Thread extendsObjectimplements Runnable

       发现Thread类实现了Runnable接口,那么程序就变成了以下的形式。

整个结构看起来很像是代理设计模式,如果是代理设计模式,客户端调用的代理类的方法也应该是接口里提供的方法,那么也应该是run()才对。

使用Runnable接口可以比Thread类能够更好的描述出数据共享的概念。此时的数据共享指的是多个线程访问同一资源的操作

示例:每一个线程对象都必须通过start启动

class MyThread extends Thread{
    private int titcket = 10;
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (this.titcket > 0){
                System.out.println("卖票,ticket = " + this.titcket --);
            }
        }
    }
}
public class TestThreadRunnable {
    public static void main(String[] args) {
        //由于MyThread类有start()方法,所以可以直接启动
        MyThread myThread1 = new MyThread();
        MyThread myThread2 = new MyThread();
        MyThread myThread3 = new MyThread();
        myThread1.start();
        myThread2.start();
        myThread3.start();
    }
}

       本程序声明了三个MyThread类的对象,并且分别调用了三次start()方法,启动线程对象。但是发现最终的结果是:每一个线程对象都在卖各自的10张票。

此时并不存在数据共享的概念。

示例:利用Runnable来实现

class MyThread implements Runnable{
    private int titcket = 10;
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (this.titcket > 0){
                System.out.println("卖票,ticket = " + this.titcket --);
            }
        }
    }
}
public class TestThreadRunnable {
    public static void main(String[] args) {
        //由于MyThread类有start()方法,所以可以直接启动
        MyThread myThread = new MyThread();
        new Thread(myThread).start();
        new Thread(myThread).start();
        new Thread(myThread).start();
    }
}

此时也属于三个线程对象,区别是:这个三个线程对象都直接占用了一个MyThread类的对象引用,也就是说这三个线程对象都直接访问同一个数据资源。

1.    请解释Thread类与Runnable接口实现多线程的区别

2.    请解释多线程两种实现方式的区别

·Thread类是Runnable接口实现多线程可以避免单根继承局限性;

Runnable接口实现的多线程可以比Thread类实现的多线程更加清楚的描述数据共享的概念;

3.    请写出多线程两种实现操作。

·把Thread类继承的方式和Runnable接口实现的方式代码都写出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值