Java创建线程的三种方式

需要自己导入commons io jar包,直接从官网下载即可。
1.通过继承Thread类创建线程,需要重写run()方法,通过start()开启线程

package com.MyThread;
import org.apache.commons.io.FileUtils;

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

/**
 * @Author: Mengqingnan
 * @Descriiption:
 * @Date:Created in 14:03 2022/3/11
 * @Modified By:
 */
//多线程同步下载图片
public class DownPng extends Thread{
    private String url;
    private String filename;

    public DownPng(String url, String filename) {
        this.url = url;
        this.filename = filename;
    }

    @Override
    public void run() {
        WebDownloader down = new WebDownloader();
        down.downloader(url,filename);
        System.out.println(filename + "下载成功!");
    }

    public static void main(String[] args) {
        DownPng downPng1 = new DownPng("https://www.kuangstudy.com/assert/images/index_topleft_logo.png","1.png");
        DownPng downPng2 = new DownPng("https://www.kuangstudy.com/assert/images/index_topleft_logo.png","2.png");
        DownPng downPng3 = new DownPng("https://www.kuangstudy.com/assert/images/index_topleft_logo.png","3.png");
        downPng1.start();
        downPng2.start();
        downPng3.start();
    }
}
class WebDownloader{
    //下载方法
    public void downloader(String url,String filename){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(filename));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常,downloader方法出现问题。");
        }
    }
}

2.通过实现Runnable接口创建线程,需要重写run()方法,并且需要通过Thread实例化对象来调用start()方法

package com.MyThread;
import org.apache.commons.io.FileUtils;

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

/**
 * @Author: Mengqingnan
 * @Descriiption:
 * @Date:Created in 14:03 2022/3/11
 * @Modified By:
 */
//多线程同步下载图片
public class DownPngbyRunnable implements Runnable{
    private String url;
    private String filename;

    public DownPngbyRunnable(String url, String filename) {
        this.url = url;
        this.filename = filename;
    }
    @Override
    public void run() {
        WebDownloader down = new WebDownloader();
        down.downloader(url,filename);
        System.out.println(filename + "通过Runnable实现类创建的线程下载成功!");
    }

    public static void main(String[] args) {
        DownPngbyRunnable downPng1 = new DownPngbyRunnable("https://www.kuangstudy.com/assert/images/index_topleft_logo.png","1.png");
        DownPngbyRunnable downPng2 = new DownPngbyRunnable("https://www.kuangstudy.com/assert/images/index_topleft_logo.png","2.png");
        DownPngbyRunnable downPng3 = new DownPngbyRunnable("https://www.kuangstudy.com/assert/images/index_topleft_logo.png","3.png");
        new Thread(downPng1).start();
        new Thread(downPng2).start();
        new Thread(downPng3).start();
    }
}

3.通过实现Callable接口创建线程,需要重写call()方法

package com.MyThread;

import javax.xml.transform.Result;
import java.util.concurrent.*;

/**
 * @Author: Mengqingnan
 * @Descriiption:
 * @Date:Created in 15:35 2022/3/11
 * @Modified By:
 */
//3.通过Callable实现类创建线程
public class TestCallable implements Callable<Boolean> {
    private String url;
    private String name;

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

    @Override
    public Boolean call() throws Exception {
        WebDownloader down = new WebDownloader();
        down.downloader(url,name);
        System.out.println("下载了文件名为:"+name);
        return true;
    }

    public static void main(String[] args) {
        TestCallable t1 = new TestCallable("https://www.kuangstudy.com/assert/images/indexlogo.png","111.jpg");
        TestCallable t2 = new TestCallable("https://www.kuangstudy.com/assert/images/indexlogo.png","222.jpg");
        TestCallable t3 = new TestCallable("https://www.kuangstudy.com/assert/images/indexlogo.png","333.jpg");

        //创建执行服务
        ExecutorService ser = Executors.newFixedThreadPool(3);

        //提交执行
        Future<Boolean> submit1 = ser.submit(t1);
        Future<Boolean> submit2 = ser.submit(t2);
        Future<Boolean> submit3 = ser.submit(t3);

        //获取结果
        try {
            boolean r1 = submit1.get();
            boolean r2 = submit2.get();
            boolean r3 = submit3.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        //关闭服务
        ser.shutdown();
    }
}

你可能感兴趣的:(java,开发语言,android)