[转] Java中继承thread类与实现Runnable接口的区别
Java中线程的创建有两种方式:
1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中
2. 通过实现Runnable接口,实例化Thread类
在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程。当我们做这个系统的时候可能会想到两种方式来实现,继承Thread类或实现Runnable接口,现在看一下这两种方式实现的两种结果。
- package com.threadtest;
- class MyThread extends Thread{
- private int ticket = 10;
- private String name;
- public MyThread(String name){
- this.name =name;
- }
- public void run(){
- for(int i =0;i<500;i++){
- if(this.ticket>0){
- System.out.println(this.name+"卖票---->"+(this.ticket--));
- }
- }
- }
- }
- public class ThreadDemo {
- public static void main(String[] args) {
- MyThread mt1= new MyThread("一号窗口");
- MyThread mt2= new MyThread("二号窗口");
- MyThread mt3= new MyThread("三号窗口");
- mt1.start();
- mt2.start();
- mt3.start();
- }
- }
运行结果如下:
- 一号窗口卖票---->10
- 一号窗口卖票---->9
- 二号窗口卖票---->10
- 一号窗口卖票---->8
- 一号窗口卖票---->7
- 一号窗口卖票---->6
- 三号窗口卖票---->10
- 一号窗口卖票---->5
- 一号窗口卖票---->4
- 一号窗口卖票---->3
- 一号窗口卖票---->2
- 一号窗口卖票---->1
- 二号窗口卖票---->9
- 二号窗口卖票---->8
- 三号窗口卖票---->9
- 三号窗口卖票---->8
- 三号窗口卖票---->7
- 三号窗口卖票---->6
- 三号窗口卖票---->5
- 三号窗口卖票---->4
- 三号窗口卖票---->3
- 三号窗口卖票---->2
- 三号窗口卖票---->1
- 二号窗口卖票---->7
- 二号窗口卖票---->6
- 二号窗口卖票---->5
- 二号窗口卖票---->4
- 二号窗口卖票---->3
- 二号窗口卖票---->2
- 二号窗口卖票---->1
通过实现Runnable接口的代码如下:
- package com.threadtest;
- class MyThread1 implements Runnable{
- private int ticket =10;
- private String name;
- public void run(){
- for(int i =0;i<500;i++){
- if(this.ticket>0){
- System.out.println(Thread.currentThread().getName()+"卖票---->"+(this.ticket--));
- }
- }
- }
- }
- public class RunnableDemo {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- //设计三个线程
- MyThread1 mt = new MyThread1();
- Thread t1 = new Thread(mt,"一号窗口");
- Thread t2 = new Thread(mt,"二号窗口");
- Thread t3 = new Thread(mt,"三号窗口");
- // MyThread1 mt2 = new MyThread1();
- // MyThread1 mt3 = new MyThread1();
- t1.start();
- t2.start();
- t3.start();
- }
- }
运行结果如下:
- 一号窗口卖票---->10
- 三号窗口卖票---->9
- 三号窗口卖票---->7
- 三号窗口卖票---->5
- 三号窗口卖票---->4
- 三号窗口卖票---->3
- 三号窗口卖票---->2
- 三号窗口卖票---->1
- 一号窗口卖票---->8
- 二号窗口卖票---->6
为什么会出现这种结果呐。我们不妨做个比喻,其实刚的程序,
继承Thread类的,我们相当于拿出三件事即三个卖票10张的任务分别分给三个窗口,他们各做各的事各卖各的票各完成各的任务,因为MyThread继承Thread类,所以在new MyThread的时候在创建三个对象的同时创建了三个线程;
实现Runnable的, 相当于是拿出一个卖票10张得任务给三个人去共同完成,new MyThread相当于创建一个任务,然后实例化三个Thread,创建三个线程即安排三个窗口去执行。
在我们刚接触的时候可能会迷糊继承Thread类和实现Runnable接口实现多线程,其实在接触后我们会发现这完全是两个不同的实现多线程,一个是多个线程分别完成自己的任务,一个是多个线程共同完成一个任务。
其实在实现一个任务用多个线程来做也可以用继承Thread类来实现只是比较麻烦,一般我们用实现Runnable接口来实现,简洁明了。
大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类。
[转] Java中继承thread类与实现Runnable接口的区别的更多相关文章
- 多线程——Java中继承Thread类与实现Runnable接口的区别
线程我只写过继承Thread类的,后来知道java多线程有三种方式,今天首先比较一下常用的继承Thread类和实现Runnable接口的区别. 按着Ctrl键进入Thread之后,发现Thread类也 ...
- Java中继承thread类与实现Runnable接口的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 在实际应用中, ...
- Java基础知识强化之多线程笔记05:Java中继承thread类 与 实现Runnable接口的区别
1. Java中线程的创建有两种方式: (1)通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中. (2)通过实现Runnable接口,实例化Thread类. 2. ...
- (转)多线程——继承Thread 类和实现Runnable 接口的区别
java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ...
- Java中实现多线程继承Thread类与实现Runnable接口的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 在实际应用中, ...
- Java 继承Thread类和实现Runnable接口的区别
ava中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 在实际应用中,我 ...
- 多线程——继承Thread 类和实现Runnable 接口的区别
java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ...
- Java通过继承thread类与实现Runnable接口实现多线程的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 一.通过继承T ...
- Java线程演示样例 - 继承Thread类和实现Runnable接口
进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...
随机推荐
- windowsphone 中CollectionViewSource和ObservableCollection的使用
功能描述:一级菜单省份 联动显示省份下的城市 直接上代码 public class City { public string Num { get; set; } public string Name ...
- PHP Mysql类【转】
前几天没事在网上转发现了一个类,记录下来: <?php Class DB { private $link_id; private $handle; private $is_log; privat ...
- Linux on ASUS N550JK4700
实际上,ASUS N550JK对Ubuntu 14.04的兼容性是相当好的,包括无线网卡.蓝牙.键盘背光的调节.触摸板的开关.音量的键盘调节都是安装后无需配置直接可以使用的,这是出乎意料的,因为这些功 ...
- SQL Server 2008无日志文件附加数据库
1.新建一个同名数据库. 2.停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复的数据库主文件剪切过去,这样就可以节省时间.) 3.启动 ...
- glide简介
golang包管理工具glide简介 golang包管理工具glide简介 前言 golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一 ...
- 提高Order by语句查询效率的两个思路
提高Order by语句查询效率的两个思路 2011-03-01 13:07 水太深 ITPUB 字号:T | T 在MySQL数据库中,Order by语句的使用频率是比较高的.但是众所周知,在使用 ...
- java design
http://www.austintek.com/mvc/ http://msdn.microsoft.com/zh-cn/magazine/cc163419.aspx http://www.croc ...
- Color the Fence
Codeforces Round #202 (Div. 2) B:http://codeforces.com/problemset/problem/349/B 题意:给你一些颜料,然后你可以用这些颜料 ...
- codeforces C. Mashmokh and Numbers
题意:给你n和k,然后让你找出n个数使得gcd(a1,a2)+gcd(a3,a4)+......的和等于k: 思路:如果n为奇数,让前n-3个数的相邻两个数都为1,n-2和n-1两个数gcd为k-an ...
- win7计划任务执行BAT文件问题
今天下午做了一个调用java 可执行jar的程序,想通过win7的计划任务来调用 批处理命令: java -jar BIDropSyc.jar 或者 javaw -jar BIDropSyc.j ...