多线程实现的两种方式及其区别
继承Thread
public class Demo2_Thread {public static void main(String[] args) {MyThread mt = new MyThread();mt.start(); // 注意调用的start()方法,而不是run()方法for(int i = 0; i < 1000; ++i)System.out.println("222");}
}class MyThread extends Thread{ // 继承Thread类@Overridepublic void run() { // 重写run方法for(int i = 0; i < 1000; ++i) // 将将要执行的代码写到run方法中System.out.println("1111111111");}
}
实现Runnable接口
public class Demo3_Thread {public static void main(String[] args) {new Thread(new MyRunnable()).start();for(int i = 0; i < 1000; ++i)System.out.println("bb");}}class MyRunnable implements Runnable{@Overridepublic void run() {for(int i = 0; i < 1000; ++i)System.out.println("aaaaaaaaaaaaaaaaa");}}
两种方式的区别
查看源码的区别:
1、继承Thread:由于子类重写父类的run(),当调用start()时,直接找子类的run()方法
2、实现Runnable接口:Thread的构造函数中传入了Runnable引用,成员变量记住它,start()调用Thread中的run()方法时,判断成员变量Runnable的引用是否为空,不为空则在Thread的run()方法中调用Runnable的run()方法。编译看Runnable的run(),运行看子类run()方法。
继承Thread:(首选这个,如果有了父类就用接口)
好处是:直接使用Thread类中的方法,代码简单
弊端是:如果已经有了父类,就不能使用这种方法
实现Runnable接口:
好处是:即使自己定义的线程类有了父类也没有关系,因为有了父类也可以实现接口,而接口是可以多实现的
弊端是:不能直接使用Thread类中的方法,需要先获取到线程对象后,才能得到Thread的方法,代码复杂
多线程实现的两种方式及其区别相关推荐
- vue 路由传参 params 与 query两种方式的区别(转载)
vue 路由传参 params 与 query两种方式的区别 初学vue的时候,不知道如何在方法中跳转界面并传参,百度过后,了解到两种方式,params 与 query.然后,错误就这么来了: ro ...
- java两种绑定方式_Javascript绑定事件的两种方式的区别
命名函数 function check(){ //code } 匿名函数 window.onload = function(){ //先获取元素对象,再绑定事件,绑定的是匿名函数不可重用 var bt ...
- vue 路由传参 params 与 query两种方式的区别
vue 路由传参 params 与 query两种方式的区别 初学vue的时候,不知道如何在方法中跳转界面并传参,百度过后,了解到两种方式,params 与 query.然后,错误就这么来了: ro ...
- Qt实现多线程编程的两种方式
Qt实现多线程编程的两种方式 方式一: 继承自QThread类,覆写run函数.此实现方法只有run函数内的代码是运行在子线程内. 代码示例: #ifndef QDEMOTHREAD_H #defin ...
- docker容器运行mysql持久化_docker容器实现数据持久化的两种方式及其区别
前言 这篇博文是我对docker实现数据持久化几种方式的特征进行一个总结. 在docker中,它的存储文件系统是在dockerhost上原有的xfs或ext4架设了一层文件系统:overlay2(将此 ...
- 递归函数两种方式的区别
概述 递归函数都不陌生,比如计算n的阶乘: function f($n){if($n <= 1) return 1;return $n * f($n-1); } 当然,有人可能会这么写: fun ...
- MySQL 清空表数据的两种方式和区别
在MySQL中删除数据有两种方式:truncate table 表名.delete from 表名. 它们在以下方面存在区别: 执行效率 truncate不扫描表,相当于重新创建了表,只保留了表的结构 ...
- java创建线程的两种方式及区别
本文将介绍创建线程的两种方式,示例代码在下面,复制粘贴即可 继承Thread类方式和实现Runnable接口方式 区别:由于在开发的过程中,很多的类都会用到继承的方式,如果采用继承的方式会让各个类之间 ...
- python: 多线程实现的两种方式及让多条命令并发执行
一 概念介绍 Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading. ...
最新文章
- iOS UIImageView 加载含有汉字的url处理方法
- POJ-1321-棋盘问题(深搜)
- nginx 开启gzip 配置js_前端性能优化之缓存与GZIP
- 信息隐藏将txt文件合并到jpg文件中_使用Kali Linux在图像内隐藏机密消息—可在任何Linux发行版使用
- window.print 点击取消后再次打印无效_教程 | 图书馆自助复印打印机使用方法
- eclipse(jee) 配置Tomcat
- FCKeditor上传漏洞总结
- 随想录(thread类的编写)
- 第四十二章 SQL函数 DATEADD
- 研究svg编辑器过程中遇到的问题总结
- windows启动管理器_把windows 10装进文件里,竟然也能启动
- python 合并word并生成目录_使用Python制作WORD报告
- 24个基本指标精粹讲解(2)--KDJ
- Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告
- 艾美捷-临床数量排名前20的药物靶点分析-磷酸二酯酶(PDEs)抗体
- Html网页制作图片选择
- Verizon将基于从英特尔收购的技术打造新款机顶盒
- 打印机虚拟服务器,FinePrint_服务器版虚拟打印机程序 V6.13 Server 英文版
- 百度地图 由起点和终点 获取中间路线的坐标集
- 如何高效阅读技术论文