6.1JavaStartThread

6.1JavaStartThread

工具类

package iostudy.thread;

import org.apache.commons.io.FileUtils;

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

/**
* 多线程下载图片
* @since JDK 1.8
* @date 2021/6/1
* @author Lucifer
*/
public class WebDownload {

   /**
    * 下载方法,形参是资源路径和保存路径
    * @param url       下载资源的路径
    * @param name     保存的本地路径
    */
   public void download(String url, String name) {
       try {
           FileUtils.copyURLToFile(new URL(url), new File(name));
      }catch (MalformedURLException e){
           e.printStackTrace();
           System.out.println("非法url!!!");
      }catch (IOException e){
           e.printStackTrace();
           System.out.println("图片下载失败!!!");
      }
  }
   /*
   写好工具类webdownload以后让如线程体当中
    */
}

 

实现多线程下载图片

package iostudy.thread;

/**
* 继承Thread类,重写run方法
* @since JDK 1.8
* @date 2021/6/1
* @author Lucifer
*/
public class TDownload extends Thread{

   /*为了方便使用,添加两个属性*/
   private String url; //远程下载图片资源路径
   private String name; //存储的本地路径

   /*将属性放入构造器当中,方便使用*/
   public TDownload(String url, String name){
       this.url = url;
       this.name = name;
  }

   @Override
   //实例化工具类,调用方法
   public void run(){
       //TODO Auto-generated method stub
       WebDownload wd = new WebDownload();
       wd.download(url, name);
       System.out.println(name);
  }

   public static void main(String[] args) {
       /*创建三个线程*/
       TDownload td1 = new TDownload("https://gimg2.baidu.com/image_search/src=http%3A%2F%2F1812.img.pp.sohu.com.cn%2Fimages%2Fblog%2F2009%2F11%2F18%2F18%2F8%2F125b6560a6ag214.jpg&refer=http%3A%2F%2F1812.img.pp.sohu.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625125787&t=c46d35d3ce29949cfbede0438e578618", "view.jpg");
       TDownload td2 = new TDownload("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fa3.att.hudong.com%2F61%2F98%2F01300000248068123885985729957.jpg&refer=http%3A%2F%2Fa3.att.hudong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625125787&t=953b30464462811deaa41ee8cb23ea02", "success.jpg");
       TDownload td3 = new TDownload("", "");

       /*启动三个线程*/
       td1.start();
       td2.start();
       td3.start();
  }
}

借助代理类对象启动线程--->避免单继承的局限性,方便共享资源

package iostudy.thread;

/**
* 创建线程:
* 1、通过实现Runnable接口,重写run方法创建
* 2、创建实现类对象 + 创建Thread类对象 + start方法启动
* @since JDK 1.8
* @date 2021/6/1
* @author Lucifer
*/
public class StartRunnable implements Runnable{

   /*重写Run方法*/
   //线程入口点
   @Override
   public void run(){
       for (int i = 0; i < 20; i++){
           System.out.println("coding!!!");
      }
  }

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

       //创建实现类对象
       StartRunnable sr = new StartRunnable();
       //创建代理类对象
       Thread t = new Thread(sr);
       //启动代理类
       t.start();
       //三合一写法--->前提是每个对象只使用一次
       new Thread(new StartRunnable()).start();

       for (int i = 0; i < 20; i++){
           System.out.println("encoding!!!");
      }
  }
}

 

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/14838804.html