21day

day21

多线程

java.Thread

多任务

普通方法调用和多线程

程序。进程。线程

Process与Thread

  • 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念

  • 进程是执行程序的一次执行过程,她是一个动态的过程,是系统资源分配的单位

  • 通常在一个进程中可以包含若按各线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位

注意:很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核。如服务器。如果模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的很快,所以就有了同时执行的错觉。

三种创建方式

Thread class :继承Thread(重点)

Runnable接口:实现Runnable接口(重点)

Callable接口:实现Callable接口(了解)

package com.wang.lesson01;
//创建线程方式一,继承Thread类 重写run()方法 调用start重启线程

public class TestThread extends Thread{
   public static void main(String[] args) {
       //主方法 main线程

       //创建一个线程对象
       TestThread testThread = new TestThread();
       //调用start()方法 开启线程
       testThread.start();
//testThread。run();
       for (int i = 0; i < 2000; i++) {
           System.out.println("我在学习多线程---"+i);
      }
  }

   @Override
   public void run() {
       //run方法线程体
       for (int i = 0; i < 20; i++) {
           System.out.println("我在学习---"+i);
      }
  }
}

调用run方法,执行run方法

调用start方法,开启线程

网图下载

package com.wang.lesson01;

import org.apache.commons.io.FileUtils;

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

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

   public TestThread2(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) {
       TestThread2 t1 = new TestThread2("https://assets.gitee.com/assets/giteego-7ec42270742374f05850d0d3ad09e303.png","303.png");
       TestThread2 t2 = new TestThread2("https://assets.gitee.com/assets/cloud_serverless-686cf926ced5d6d2f1d6e606d270b81e.png","81.png");
       TestThread2 t3 = new TestThread2("https://assets.gitee.com/assets/jenkins_for_gitee-554ec65c490d0f1f18de632c48acc4e7.png","47.png");

       t1.start();
       t2.start();
       t3.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方法出现异常");
      }
  }
}

 

posted @ 2021-04-29 21:57  卧剑之鱼  阅读(254)  评论(0)    收藏  举报