多线程中Thread和Runnable的区别
2016-04-25 11:38
357 查看
Thread是类,Runnable是接口
JAVA中只可以继承一个类,但可以实现多个接口。
所以如果要实现多继承就要用Runnable
此外,以卖票为例:
以下为实现Runnable接口
输出的是:
以下为继承Thread类:
输出:
可以看出有明显的不同
其实这个很好解释:
先拿实现Runnable接口的那个程序来说,我们是创建了一个Mythread对象,然后用这个对象创建了三个线程对执行,相当于:我有十张票,我分到三个窗口去卖。
而继承Thread类的那个程序,我们是创建三个MyThread对象,然后这三个对象分别去创建了一个线程去执行,相当于:有三个人,每人有十张票,三个人分别在三个窗口去卖。
大多数情况下,我们会去实现Runnable而不是继承Thread。
JAVA中只可以继承一个类,但可以实现多个接口。
所以如果要实现多继承就要用Runnable
此外,以卖票为例:
以下为实现Runnable接口
public class Text { public static void main(String[] args) { Mythread my = new Mythread(); Thread t1 = new Thread(my, "一号窗口"); Thread t2 = new Thread(my, "二号窗口"); Thread t3 = new Thread(my, "三号窗口"); t1.start(); t2.start(); t3.start(); } } class Mythread implements Runnable { private int ticket = 10; @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 10; i++) { if (this.ticket > 0) System.out.println(Thread.currentThread().getName() + "卖票---->" + (this.ticket--)); } } }
输出的是:
二号窗口卖票---->10 一号窗口卖票---->8 一号窗口卖票---->7 一号窗口卖票---->6 一号窗口卖票---->5 一号窗口卖票---->4 一号窗口卖票---->3 一号窗口卖票---->2 一号窗口卖票---->1 三号窗口卖票---->9
以下为继承Thread类:
public class Text { public static void main(String[] args) { MyThread t1 = new MyThread("一号窗口"); MyThread t2 = new MyThread("二号窗口"); MyThread t3 = new MyThread("三号窗口"); t1.start(); t2.start(); t3.start(); } } class MyThread extends Thread { private int ticket = 10; private final String name; public MyThread(String name) { this.name = name; } @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 10; i++) { if(this.ticket>0) System.out.println(this.getName() + "卖票---->" + (this.ticket--)); } } }
输出:
一号窗口卖票---->10 二号窗口卖票---->10 三号窗口卖票---->10 二号窗口卖票---->9 一号窗口卖票---->9 二号窗口卖票---->8 三号窗口卖票---->9 二号窗口卖票---->7 一号窗口卖票---->8 二号窗口卖票---->6 三号窗口卖票---->8 三号窗口卖票---->7 二号窗口卖票---->5 一号窗口卖票---->7 二号窗口卖票---->4 三号窗口卖票---->6 二号窗口卖票---->3 一号窗口卖票---->6 二号窗口卖票---->2 三号窗口卖票---->5 二号窗口卖票---->1 一号窗口卖票---->5 一号窗口卖票---->4 一号窗口卖票---->3 一号窗口卖票---->2 一号窗口卖票---->1 三号窗口卖票---->4 三号窗口卖票---->3 三号窗口卖票---->2 三号窗口卖票---->1
可以看出有明显的不同
其实这个很好解释:
先拿实现Runnable接口的那个程序来说,我们是创建了一个Mythread对象,然后用这个对象创建了三个线程对执行,相当于:我有十张票,我分到三个窗口去卖。
而继承Thread类的那个程序,我们是创建三个MyThread对象,然后这三个对象分别去创建了一个线程去执行,相当于:有三个人,每人有十张票,三个人分别在三个窗口去卖。
大多数情况下,我们会去实现Runnable而不是继承Thread。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python3写爬虫(四)多线程实现数据爬取
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序