Thread与Runnable的区别
Java中有两种实现多线程的方式:通过继承Thread类或者实现Runnable接口实现,那么这两个有什么区别?
我将通过一个例子来区别:分别使用这两种方法读取1-10十个数字。
首先编写程序:
先使用继承Thread类方法进行实现:
测试类:
然后我们看一下运行结果:
继承了Thread进行多线程处理后,结果是三个线程各自占用了一个资源进行读取。各自读取了一遍1-10十个数字。
如果要使用多线程实现多个线程同时调用一个资源进行处理的话就会出现重复调用。
举个例子:如果我们使用继承Thread类来实现一个售电影票票功能的话,那么就会出现一种不同的人购买同一场电影票的时候买到同个座位。这显然不是我们想要看到的结果。
那么如果我们想要进行多线程处理时,处理同个资源的话应该怎么办?
接下来我们使用实现Runnable接口的方法进行处理:
测试类:
运行结果:
从运行结果看来的情况是三个线程共同占用了同一个资源进行读取。
每个线程调用的是同一个RunableDemo对象中的run()方法,访问的是同一个对象中的变量(number)。
由上可看出实现Runnable接口与继承Thread类之间很明显的区别了。