多线程(五)---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接口多线程

相关文章
相关标签/搜索