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接口

  1. 增加程序的扩展性;在实现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();}}

两种实现多线程的方式 迅雷案列相关推荐

  1. 两种 C++ 多线程编程方式,看完不懂打我...

    多线程在实际编程中的重要性不言而喻,对 C++ 而言,当我们需要使用多线程时,有多种方案可供选择.比如 POSIX 线程 pthread.boost::thread 库.C++11 开始支持的 std ...

  2. 两种获取connectionString的方式

    两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...

  3. Hibernate中两种获取Session的方式

    转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...

  4. 在计算机系统中有两种不同的图像编码方式,第二章计算机系统与计算原理.ppt...

    第二章计算机系统与计算原理 大学计算机基础 * 信息表示与处理 ----西文字符 ASCII 码是美国信息交换标准代码(American Standard Code for Information I ...

  5. TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable

    TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable 目录 输出结果 代码设计 输出结果 代码设计 # tensorflow中的两种定义scope(命 ...

  6. python用outlook自动发邮件_python使用两种发邮件的方式smtp和outlook示例

    smtp是直接调用163邮箱的smtp服务器,需要在163邮箱中设置一下.outlook发送就是Python直接调用win32方式.调用程序outlook直接发送邮件. import win32com ...

  7. 基于ArcGIS JS API实现的两种距离和面积测量方式

    文章目录 前言 开发思路 主要代码 效果测试 效果图 测试页面 开发总结 参考链接 前言 在一些地图地图应用中,距离.面积测量属于基础功能.ArcGIS API for JavaScript有单独提供 ...

  8. python通过outlook发送邮件_python使用两种发邮件的方式smtp和outlook示例

    本篇文章主要介绍了python使用两种发邮件的方式smtp和outlook示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. smtp是直接调用163邮箱的smtp服务器,需要在163邮箱中设置 ...

  9. 二阶段补充:文件上传服务端处理,后端文件上传、前端两种文件上传方式

    1.文件上传 2.后端文件上传 两种方案: 兼容性较好的commons-fileupload,支持所有版本的Servlet,即所有版本的Tomcat 优点: 兼容性 缺点 需要外部jar,比较麻烦.代 ...

最新文章

  1. linux线程10s没有得到调度,操作系统相关题目(附上答案)
  2. UVa 489 Hangman Judge
  3. (转载)用oracle触发器对记录表增加记录的问题
  4. 带有AWS Lambda和Java的无服务器FaaS
  5. Spyder kernel died 错误
  6. 常用css属性集(持续更新…)
  7. 抽象工厂模式java_Java描述设计模式(04):抽象工厂模式
  8. linux学习之lvm2逻辑卷管理
  9. 如何通过Android日历api插入日程(事件)和提醒(通知)
  10. 我说MySQL联合索引遵循最左前缀匹配原则,面试官让我回去等通知
  11. 尚硅谷 clickHouse
  12. 小姑娘说,我全靠水群,挤进了安全圈
  13. 加快C++代码的编译速度方法
  14. php 超级管理员,WordPress超级管理员功能,超权限管理用户,可修改登录名
  15. WIFI模块RTL8723BU驱动移植
  16. VUE项目前端页面添加水印
  17. python生成不对称正弦波与傅里叶级数分解
  18. arduino 长传出错_请问Arduino IDE在编译时正常,却无法上传且显示找无效库是怎么回事?...
  19. figma和sketch应该选择哪个?
  20. TestNG框架自动化简述

热门文章

  1. 本题要求递归实现一个计算X的N次方 (n≥1)的函数。
  2. 华清远见-创客学院-专业:嵌入式人工智能开发 C++ 课程(包含天猫精灵)
  3. 值得看三次的高干文_值得看三次的高干文12部
  4. JAVA异常中的坑--trytry-catch-finally的执行顺序
  5. 手机上的 Google 地图
  6. 【动态规划】—— 背包问题
  7. 打卡小程序的实现思路
  8. android 渠道方案,Android 不同渠道差异代码
  9. 使用少量数据去除神经网络中的水印 -- WILD
  10. 如何玩转SHOPEE关键字广告(一)-跨境知道