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)创建子类。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关文章:
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
家具网站制作软件,家具厂怎么跑业务?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
黑客如何利用漏洞与弱口令入侵网站服务器?
如何注册花生壳免费域名并搭建个人网站?
如何通过虚拟主机快速完成网站搭建?
专业网站建设制作报价,网页设计制作要考什么证?
如何快速搭建高效WAP手机网站?
设计网站制作公司有哪些,制作网页教程?
如何彻底卸载建站之星软件?
建站主机选择指南:服务器配置与SEO优化实战技巧
动图在线制作网站有哪些,滑动动图图集怎么做?
制作网站的模板软件,网站怎么建设?
建站主机是否等同于虚拟主机?
如何获取开源自助建站系统免费下载链接?
专业公司网站制作公司,用什么语言做企业网站比较好?
如何选择高性价比服务器搭建个人网站?
如何在IIS7中新建站点?详细步骤解析
如何在景安服务器上快速搭建个人网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
建站之星代理如何获取技术支持?
python的本地网站制作,如何创建本地站点?
如何快速搭建安全的FTP站点?
制作农业网站的软件,比较好的农业网站推荐一下?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
活动邀请函制作网站有哪些,活动邀请函文案?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
平台云上自主建站:模板化设计与智能工具打造高效网站
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
建站主机选购指南:核心配置优化与品牌推荐方案
C++用Dijkstra(迪杰斯特拉)算法求最短路径
定制建站方案优化指南:企业官网开发与建站费用解析
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
建站主机选哪家性价比最高?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
如何在IIS管理器中快速创建并配置网站?
建站之星24小时客服电话如何获取?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
装修招标网站设计制作流程,装修招标流程?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何快速搭建高效简练网站?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
南京网站制作费用,南京远驱官方网站?
XML的“混合内容”是什么 怎么用DTD或XSD定义
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何在云服务器上快速搭建个人网站?
网站制作难吗安全吗,做一个网站需要多久时间?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。