首页 > 其他分享 >多线程---Thread和Runnable

多线程---Thread和Runnable

时间:2022-09-04 22:12:28浏览次数:103  
标签:Runnable String Thread --- 线程 多线程 public name

多线程

参考视频:多线程02:线程、进程、多线程哔哩哔哩bilibili

1.概念

 

 

 

 

 

2.线程创建

创建线程方式一:继承Thread类,重写run()方法,调用start开启线程

package com.mokuiran.thread;

public class Demo extends Thread {
   @Override
   public void run() {
       //run方法线程体
       for (int i = 0; i < 20; i++) {
           System.out.println("我在玩游戏!!!"+i);
      }
  }

   public static void main(String[] args) {
       //main线程,主线程

       //创建一个线程对象
       Demo demo = new Demo();

       //调用start()方法开启线程
       demo.start();
       for (int i = 0; i < 200; i++) {
           System.out.println("我在学习!!!"+i);
      }
  }
}
//注意:线程的开启不一定立即执行,由CPU调度执行

创建线程方式一:实现Runnable接口

package com.mokuiran.thread;

public class RunnableDemo implements Runnable {
   @Override
   public void run() {
       //run方法线程体
       for (int i = 0; i < 20; i++) {
           System.out.println("我在玩游戏!!!"+i);
      }
  }

   public static void main(String[] args) {
       //main线程,主线程

       //创建runnable接口的实现类对象
       RunnableDemo runnableDemo = new RunnableDemo();

       //创建线程对象,通过线程对象来开启我们的线程,代理
       Thread thread = new Thread();
       thread.start();
       for (int i = 0; i < 200; i++) {
           System.out.println("我在学习!!!"+i);
      }
  }
}

image-20220904201404286

总结

继承Thread类

  • 子类继承Thread类具备多线程能力

  • 启动线程:子类对象.start()

  • 不建立使用:避免OOP单继承局限性

实现Runnable接口

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

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

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

注意:两个方法的输出结果都是交替输出,线程之间并无先后顺序。

案例一:

实现多线程同步下载图片:

package com.mokuiran.thread;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

//实现多线程同步下载图片
public class Demo2 extends Thread{
   private String url;//网络图片的地址
   private String name;//保存的文件名

   public Demo2(String url, String name){
       this.url = url;
       this.name = name;
  }

   @Override
   public void run() {
       WebDownLoader webDownLoader = new WebDownLoader();
       webDownLoader.downloader(url,name);
       System.out.println("下载的文件名:"+name);
  }

   public static void main(String[] args) {
       Demo2 demo2 = new Demo2("/i/l/?n=22&i=blog/2941481/202207/2941481-20220730105748137-1136505936.png","代码.png");
       demo2.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("异常,downloader()方法出现问题");
      }
  }
}
 

标签:Runnable,String,Thread,---,线程,多线程,public,name
From: https://www.cnblogs.com/mokuiran/p/16656273.html

相关文章

  • 预科知识3-基本的Dos命令
    打开CMD的方式:​1.开始+系统+命令提示符​2.win键+R输入cmd打开控制台(推荐使用)​3.在任意的文件夹里面,按住shift+鼠标右键点击,在此处打开powershell窗......
  • linux驱动移植-usb键盘接口驱动
    在前面的章节我们已经介绍了usb鼠标驱动的编写,并对usb摄像头驱动源码进行了分析。由于usb键盘驱动和usb鼠标驱动代码非常相似,所以这一节就粗略介绍一下usb键盘驱动的编写。......
  • 2022-09-04 京剧《红鬃烈马》
    故事情节介绍:唐丞相王允,生有三女,大女王金钏,嫁苏龙,官居户部;二女王银钏,配魏虎,兵部侍郎;三女王宝钏,因过溺爱,在十字街头,高搭彩楼,抛球选婿,球中花郎薛平贵。王允嫌贫爱富,悔却前言......
  • Flask 学习-47.Flask-RESTX 设置 Swagger 文档
    前言SwaggerAPI文档是自动生成的,可从您的API的根URL获取。@api.doc()您可以使用装饰器配置文档。SwaggerUI文档默认flask-restx提供SwaggerUI文档,从API的......
  • 强化学习-Double DQN(两个DQN模型)
    对于之前提到的DQN模型,损失函数使用的Q(state)=reward+Q(nextState)maxQ(state)由训练网络生成,Q(nextState)max由目标网络生成这种损失函数会存在问题,即当Q(nex......
  • 2022-09-04 京剧《荒山泪》
    京剧《荒山泪》,又名《祈祷和平》,剧本是金仲荪先生在1929年编写的,程砚秋1930年岁尾首演。1956年此剧拍摄了电影。此戏和《春闺梦》是姊妹篇。1929年3月的蒋桂战争、5月的......
  • 1.try-except 2. if 0<=score<=1.0 3. print加引号是为什么
    Assignment3.3Writeaprogramtopromptforascorebetween0.0and1.0.Ifthescoreisoutofrange,printanerror.Ifthescoreisbetween0.0and1.0,pri......
  • 微服务-Nacos配置管理之配置热更新
    前言:Nacos不仅可以作为注册中心,还可以作为配置中心,这点优于eureka。这里介绍一下Nacos的配置热更新方法Nacos配置热更新我们引入Nacos配置中心的最终目的,是修改nacos中的......
  • 接口协议(2) - SPI
    SPI(SerialPeripheralInterface)是一种可以全双工/半双工/单工通信的接口协议,由2(单工)/3(双工)条信号线和1+条(每个从设备1条)片选信号线组成。支持MSB/LSB传输模式,支持......
  • Typescript类型体操 - Chainable Options
    题目中文在JavaScript中我们经常会使用可串联(Chainable/Pipeline)的函数构造一个对象,但在TypeScript中,你能合理的给它赋上类型吗?在这个挑战中,你可以使用任意你喜欢的......