多线程(五)---Runnable接口与Thread类比较

多线程(五)---Runnable与Thread类比较

(一)Thread类,模拟售票发现线程资源被共享,如何解决此问题?

Thread

1 : 可以用static修饰符、或者单例模式,可以暂时解决此问题,不过不建议使用。

2 : 代码分析堆栈中的状态?

内存区域分析

注:多次启动线程是非法的。特别是当线程已经执行结束后,不能重新启动。将抛出IllegalThreadStateException错误

此时我们需要将线程资源和线程任务进行分离!!!!

(二)Runnable实现方式

1:定义一个类实现Runnable

2:覆盖Runnable接口中的run方法,并将线程任务写在方法中

3:通过Thread类创建线程对象,并将实现Runnable接口对象,作为Thread类构造函数的参数进行传递

4:启动start方法,开启线程

class SaleTicket2 implements Runnable{
    private int tickets = 100;
    public void run(){
        while (true){
            if (tickets>0){
                System.out.println(Thread.currentThread().getName()+"------tickets:"+tickets--);
            }
        }
    }
}
public class TicketDemo2 {
    public static void main(String[] args) {
        SaleTicket2 t = new SaleTicket2(); // 线程任务对象
        Thread t1 = new Thread(t);// 创建线程对象并且并将实现了Runnable接口对象作为Thread构造函数的参数进行传递
        Thread t2 = new Thread(t);
        Thread t3 = new Thread(t);
        Thread t4 = new Thread(t);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

(三)实现Runnable接口与继承Thread类两种方式分析?

实现Runnable接口的好处:

1: 避免了继承Thread类的单继承的局限性

2: Runnable接口的出现更符合面向对象,将线程单独的进行对象封装

3: Runnable接口出现,降低了线程对象和线程任务的耦合性

所以综上所述:创建线程推荐使用Runnable接口

转载于:https://my.oschina.net/u/3136594/blog/861043

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值