大家好,今天分享.使用Runnable接口创建线程

首先Java创建线程可以通过三种方法:
即:

1.继承Thread类创建线程类(重点)

2.通过Runnable接口创建线程类(重点)

3.通过Callable接口(了解即可)

今天,使用Runnable接口创建线程。

步骤:

1.定义MyRunnable类实现.Runnable接口
2.创建run()方法,编写线程执行体
3.创建线程对象,调用start()方法启动线程

package Demo01;public class Thread03  implements Runnable{//    创建线程的第二种方式:
//
//    1.实现Runnable接口//2.重写run()方法,编写线程执行体//3.创建线程对象,调用start()方法启动线程public void run()  {//run方法线程体for (int i = 0; i < 400; i++) {System.out.println("我在吃饭"+i);     //输出的信息}}public static void main(String[] args) {     //这里是主线程Thread03 thread03 =new Thread03();    //创建Runnable接口的实现类对象Thread thread =new Thread(thread03);      //创建线程对象,通过线程对象来启动线程thread.start();     //开启线程for (int i = 0; i < 300; i++) {System.out.println("多线程"+i);}}
}

它的执行结果:


解释:
1.它的执行结果和 Thread继承的效果是一样的

2.调用start()方法启动线程: 结果就是线程以交替同时启动

这里还有注意点:

这两行代码(注意)

  //    Thread thread =new Thread(thread03);      //创建线程对象,通过线程对象来启动线程//  thread.start();     //开启线程

它等效于下面这一行代码:

   new Thread(thread03).start();

整体代码在下面:

package Demo01;public class Thread03  implements Runnable{//    创建线程的第二种方式:
//
//    1.实现Runnable接口//2.重写run()方法,编写线程执行体//创建线程对象,调用start()方法启动线程public void run()  {//run方法线程体for (int i = 0; i < 400; i++) {System.out.println("我在吃饭"+i);     //输出的信息}}public static void main(String[] args) {     //这里是主线程Thread03 thread03 =new Thread03();    //创建Runnable接口的实现类对象//    Thread thread =new Thread(thread03);      //创建线程对象,通过线程对象来启动线程//  thread.start();     //开启线程new Thread(thread03).start();     //它等效上面两行被注释掉的代码for (int i = 0; i < 300; i++) {System.out.println("多线程"+i);}}
}

这是它的执行结果:(它是一样的效果)


它是一样的效果

下面我们使用Runnable接口的方式来实现之前的Thread实现下载图片:

看源码:

package Demo02;import org.apache.commons.io.FileUtils;import javax.imageio.IIOException;
import java.io.File;
import java.io.IOException;
import java.net.URL;public class ThreadTest  implements Runnable {     //这一行要注意private String url;private String name;public ThreadTest(String url, String name) {this.url = url;this.name = name;}@Overridepublic void run() {WebDownloader webDownloader = new WebDownloader();webDownloader.downloader(url, name);System.out.println("下载之后文件名是:" + name);}public static void main(String[] args) {ThreadTest k1 = new ThreadTest("https://img-home.csdnimg.cn/images/20220218094038.jpg ", "1.jpg");ThreadTest k2 = new ThreadTest("https://img-home.csdnimg.cn/images/20220218094038.jpg ", "2.jpg");ThreadTest k3 = new ThreadTest("https://img-home.csdnimg.cn/images/20220218094038.jpg ", "3.jpg");new Thread(k1).start();     //这是我们改动的地方new Thread(k2).start();new Thread(k3).start();}
}class WebDownloader{public  void downloader(String url,String name){try {FileUtils.copyURLToFile (new URL(url),new File(name));} catch (IOException e) {e.printStackTrace();System.out.println("io异常,downloader方法异常");}}
}

看结果:

就是这样的

总结:

继承Thread 类
子类继承Thread类具有多线程能力
启动线程: 子类对象.start()
不建议使用:
OOP单继承有局限性

实现接口Runnable具有多线程能力

启动线程:传入目标对象+Thread对象.start ()

推荐使用:避免单继承局限性,灵活方便,方便同一对象被多个线程使用

好了,有关于使用Runnable接口创建线程就到这里了,谢谢大家

使用Runnable接口创建线程,很简单相关推荐

  1. Java多线程(2)--Thread类继承和Runnable接口创建线程

    Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现. Thread类的特性 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run() ...

  2. java基础 通过继承Thread类和实现Runnable接口创建线程

    java 创建线程 Java中,线程也是一种对象,但不是任何对象都可以成为线程. 只有实现了Runnable接口或继承了Thread类的对象才能成为线程. 继承Thread类 //格式: class ...

  3. 线程的应用-实现Runnable接口创建线程

    如果自己的类已经extends另一个类,就无法直接extends Thread,此时,可以实现一个Runnable接口 public class MyThread extends OtherClass ...

  4. Java用Callable接口创建线程

     一.概述  使用Callable接口创建线程能够返回数据.与Runnable接口创建线程的方式有点类似,也是需要通过Thread类来创建线程.由于Thread类的构造函数中没有Callable接口, ...

  5. 通过实现Runnable接口创建,开启,休眠和中断线程。

    ** 通过实现Runnable接口创建,开启,休眠和中断线程. ** 1.创建线程 在Android中,提供了两种创建线程的方法,一种是通过Thread类的构造方法创建线程对象,并重写run()方法实 ...

  6. Java实现Runnable接口创建多线程

    Java实现Runnable接口创建多线程 通过继承Thread类,实现多线程,但是,这种方式有一定的局限性,因为,Java中只支持单继承,一个类一旦继承了某个父类,就无法再继承Thread类 比如, ...

  7. java多线程------实现Runnable接口创建多进程,实现资源共享

    //实现Runnable接口创建多进程,实现资源共享 package xian_cheng;public class Example05 {public static void main(String ...

  8. java实现Runnable接口启动线程

    这里写自定义目录标题 java实现Runnable接口启动线程 重写run方法 java实现Runnable接口启动线程 重写run方法 run方法里面装需要执行的代码块 @Override publ ...

  9. 实现runable接口创建线程

    package com.learn;class ThreadDemo02 implements Runnable {public void run() {for (int i = 0; i < ...

最新文章

  1. 大话RxJava:一、初识RxJava与基本运用
  2. 【知识星球】卷积核和感受野可动态分配的分组卷积
  3. conda使用报错:ImportError:DLL load failed
  4. window访问不到linux的activemq_springboot整合开源项目测试拦截接口访问的频率
  5. DOTNET Core MVC(二)路由初探
  6. 我的网络安全第三次实验汇报
  7. 【Computer Organization笔记12】流水线技术概述
  8. (专升本)Internet(计算机网络系统)
  9. android 9指纹认证_Android指纹认证教程
  10. Typescript - enum 枚举类型(数值型枚举 / 字符串枚举 / 常量枚举 / 异构枚举 / 计算枚举成员 / 联合枚举和枚举成员类型 / 运行时的枚举 / 环境枚举 / 对象与枚举)教程
  11. iOS中常用的几种延时加载/执行的处理办法
  12. 高德vue-amap使用(一)标记点位获取地址及经纬度
  13. c语言动态与静态分配内存空间的区别
  14. 如果电脑蓝屏0xc000021a怎么办
  15. 基于物理的渲染PBR(一):pbr的基础理论和推导
  16. JavaScript的入门(下)
  17. 山东师大计算机专业研究生,山东师范大学现代教育技术(专硕)专业考研难度分析-专业排名-难度大小...
  18. 深度学习工程应用快速入门
  19. 【渝粤教育】电大中专电子商务网站建设与维护 (15)作业 题库
  20. C++STL中vector容器 assign()函数的用法

热门文章

  1. 鲜为人知的MySQL语法介绍(210629+NULLIF())
  2. 画好高中男生校服有哪些技巧?
  3. SAP-HANA-S4相对ECC财模块变化点介绍
  4. P2522 [HAOI2011]Problem b (莫比乌斯反演)
  5. vscode配置用户代码片段(快捷键自定义代码模板)
  6. oracle行转列、列转行
  7. AIDAS原理(转载)
  8. 聊聊 dotnet 7 对 bool 与字符串互转的底层性能优化
  9. 【豆瓣电影】2019/11/21/Python搜索豆瓣电影(Top100)爬虫+D3.js词云(票房和豆瓣评分)实现
  10. 东芝为何无法成为通用电气?日媒:或在于赚钱方法