两种实现多线程的方式 迅雷案列
Thread多线程类
继承Thread类使子类有多线程的能力
1.子类需要重写run()方法
- 重要,run()里面是子线程的重要实现过程
东西的案列
package 第一种;public class Thunder extends Thread{@Overridepublic void run() {//继承Thread需要重写run()方法// TODO Auto-generated method stubfor(int i=1;i<101;i++) {System.out.println(Thread.currentThread().getName()+"下载进度:"+i+"%");//使用这种只能是默认的名字或者在a.star()之前设置名字try {Thread.sleep(50);//没个子线程的休眠时间及时间片} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
测试类
package 第一种;
public class ThunderTest {
public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stubSystem.out.println("我是主线程");Thread s=Thread.currentThread();boolean sk=s.isDaemon();//判断主函数是否是守护程序System.out.println(sk);Thunder a=new Thunder();Thunder a1=new Thunder();Thunder a2=new Thunder();Thunder a3=new Thunder();a.setName("复仇者联盟");a.start();a1.setName("复仇者联盟2");a1.start();a2.setName("复仇者联盟3");a2.start();a3.setName("复仇者联盟4");a3.start();}
/*
复仇者联盟2下载进度:1%
.。。。。
。。
复仇者联盟4下载进度:92%
复仇者联盟下载进度:92%
复仇者联盟2下载进度:93%
复仇者联盟3下载进度:93%
复仇者联盟4下载进度:93%
复仇者联盟下载进度:93%
复仇者联盟3下载进度:94%
复仇者联盟2下载进度:94%
复仇者联盟4下载进度:94%
复仇者联盟下载进度:94%
复仇者联盟2下载进度:95%
复仇者联盟3下载进度:95%
复仇者联盟4下载进度:95%
复仇者联盟下载进度:95%
复仇者联盟3下载进度:96%
复仇者联盟2下载进度:96%
复仇者联盟4下载进度:96%
复仇者联盟下载进度:96%
复仇者联盟2下载进度:97%
复仇者联盟3下载进度:97%
复仇者联盟下载进度:97%
复仇者联盟4下载进度:97%
复仇者联盟3下载进度:98%
复仇者联盟2下载进度:98%
复仇者联盟4下载进度:98%
复仇者联盟下载进度:98%
复仇者联盟3下载进度:99%
复仇者联盟2下载进度:99%
复仇者联盟4下载进度:99%
复仇者联盟下载进度:99%
复仇者联盟4下载进度:100%
复仇者联盟2下载进度:100%
复仇者联盟3下载进度:100%
复仇者联盟下载进度:100%
*/
}
实现Runnable接口
- 增加程序的扩展性;在实现Runnable接口的同时;可以继承别的东西
package 第二种;
//实现是为了
public class Thunder implements Runnable {//实现接口@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=1;i<101;i++) {System.out.println(Thread.currentThread().getName()+"下载进度:"+i+"%");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
测试类
package 第二种;public class RunableTest {public static void main(String[] args) {// TODO Auto-generated method stubThunder t=new Thunder();//只是由线程的能力//使用线程的能力包装下Thread t1=new Thread(t,"钢铁侠");//传参Thread t2=new Thread(t,"蜘蛛侠");//传参Thread t3=new Thread(t,"美国堆中");//传参Thread t4=new Thread(t,"海绵宝宝");//传参Thread t5=new Thread(t,"神奇女侠");//传参Thread t6=new Thread(t,"海王");//传参//只有这个类才由start方法 启动子线程的功能t1.start();t2.start();t3.start();t4.start();t5.start();t6.start();}}
练习 第二种方法好 这很灵活
package 第二种;public class Thunder1 implements Runnable {@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=1;i<101;i++) {System.out.println(Thread.currentThread().getName()+i+"%");try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
测试类
package 第二种;public class Thunder1Test {public static void main(String[] args) {// TODO Auto-generated method stubThunder1 a=new Thunder1();Thread s1=new Thread(a,"钢铁侠");s1.start();Thread s2=new Thread(a,"绿巨人");s2.start();Thread s3=new Thread(a,"沐浴之王");s3.start();}}
package 第二种1;public class Thunder implements Runnable {@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=1;i<101;i++) {System.out.println(Thread.currentThread().getName()+i+"%");try {Thread.sleep(5000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
package 第二种1;public class ThunDerTest {public static void main(String[] args) {// TODO Auto-generated method stubThunder a=new Thunder();Thread s1=new Thread(a,"哥谭市");Thread s2=new Thread(a,"经历");Thread s3=new Thread(a,"金刚狼");Thread s4=new Thread(a,"我是你爸");s1.start();s2.start();s3.start();s4.start();}}
两种实现多线程的方式 迅雷案列相关推荐
- 两种 C++ 多线程编程方式,看完不懂打我...
多线程在实际编程中的重要性不言而喻,对 C++ 而言,当我们需要使用多线程时,有多种方案可供选择.比如 POSIX 线程 pthread.boost::thread 库.C++11 开始支持的 std ...
- 两种获取connectionString的方式
两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...
- Hibernate中两种获取Session的方式
转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...
- 在计算机系统中有两种不同的图像编码方式,第二章计算机系统与计算原理.ppt...
第二章计算机系统与计算原理 大学计算机基础 * 信息表示与处理 ----西文字符 ASCII 码是美国信息交换标准代码(American Standard Code for Information I ...
- TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable
TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable 目录 输出结果 代码设计 输出结果 代码设计 # tensorflow中的两种定义scope(命 ...
- python用outlook自动发邮件_python使用两种发邮件的方式smtp和outlook示例
smtp是直接调用163邮箱的smtp服务器,需要在163邮箱中设置一下.outlook发送就是Python直接调用win32方式.调用程序outlook直接发送邮件. import win32com ...
- 基于ArcGIS JS API实现的两种距离和面积测量方式
文章目录 前言 开发思路 主要代码 效果测试 效果图 测试页面 开发总结 参考链接 前言 在一些地图地图应用中,距离.面积测量属于基础功能.ArcGIS API for JavaScript有单独提供 ...
- python通过outlook发送邮件_python使用两种发邮件的方式smtp和outlook示例
本篇文章主要介绍了python使用两种发邮件的方式smtp和outlook示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. smtp是直接调用163邮箱的smtp服务器,需要在163邮箱中设置 ...
- 二阶段补充:文件上传服务端处理,后端文件上传、前端两种文件上传方式
1.文件上传 2.后端文件上传 两种方案: 兼容性较好的commons-fileupload,支持所有版本的Servlet,即所有版本的Tomcat 优点: 兼容性 缺点 需要外部jar,比较麻烦.代 ...
最新文章
- linux线程10s没有得到调度,操作系统相关题目(附上答案)
- UVa 489 Hangman Judge
- (转载)用oracle触发器对记录表增加记录的问题
- 带有AWS Lambda和Java的无服务器FaaS
- Spyder kernel died 错误
- 常用css属性集(持续更新…)
- 抽象工厂模式java_Java描述设计模式(04):抽象工厂模式
- linux学习之lvm2逻辑卷管理
- 如何通过Android日历api插入日程(事件)和提醒(通知)
- 我说MySQL联合索引遵循最左前缀匹配原则,面试官让我回去等通知
- 尚硅谷 clickHouse
- 小姑娘说,我全靠水群,挤进了安全圈
- 加快C++代码的编译速度方法
- php 超级管理员,WordPress超级管理员功能,超权限管理用户,可修改登录名
- WIFI模块RTL8723BU驱动移植
- VUE项目前端页面添加水印
- python生成不对称正弦波与傅里叶级数分解
- arduino 长传出错_请问Arduino IDE在编译时正常,却无法上传且显示找无效库是怎么回事?...
- figma和sketch应该选择哪个?
- TestNG框架自动化简述