zoukankan      html  css  js  c++  java
  • [Java]多线程基础操作/创建线程/下载图片

    创建线程的三种方式

    • 继承Thread类(重点)
    • 实现Runnable接口(重点)推荐使用
    • 实现Callable接口(了解)

    继承Thread类

    package Thread;
    
    /**
     * 创建线程方式一:继承Thread
     *
     * @author ZhaoLu cang on 2021/4/10 0010
     */
    //注意,线程开启不一定立即执行,由cpu调度执行
    public class Thread01 extends Thread{
        //重写run方法
        @Override
        public void run() {
            //run方法线程体
            for(int i=0;i<20;i++){
                System.out.println("学习多线程中......");
    
            }
        }
    
        public static void main(String[] args) throws InterruptedException {
            //创建一个线程对象
            Thread01 thread=new Thread01();
            //调用start方法
            thread.start();
            //main主线程
            for(int i=0;i<20;i++){
                System.out.println("正在学习代码......");
    
            }
        }
    }
    View Code

    多线程下载图片

    package Thread;
    
    import org.apache.commons.io.FileUtils;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    
    /**
     * 练习Thread,多线程下载图片
     *
     * @author ZhaoLu cang on 2021/4/10 0010
     */
    public class Thread02 extends Thread{
    
        private String name;//文件名
        private String url;//地址
    
        public Thread02(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) {
            Thread02 t1=new Thread02("https://pic.cnblogs.com/avatar/1280312/20190419133542.png","我的头像.jpg");
            Thread02 t2=new Thread02("https://5b0988e595225.cdn.sohucs.com/images/20190108/c060afad8f594428a584e5efd8b64f23.jpeg","apache图标.jpg");
            Thread02 t3=new Thread02("https://avatar.csdnimg.cn/1/7/D/1_weixin_43847567_1584060639.jpg","CSDN头像.jpg");
    
            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){
                System.out.println("IO异常,downloader方法"+e);
            }
            }
    
    }
    View Code

    实现Runnable接口

    package Thread;
    
    /**
     * 创建线程方式二:Runnable方法
     *
     * @author ZhaoLu cang on 2021/4/10 0010
     */
    public class Thread03 implements Runnable {
        //重写run方法
        @Override
        public void run() {
            //run方法线程体
            for(int i=0;i<20;i++){
                System.out.println("学习多线程中......");
    
            }
        }
    
        public static void main(String[] args) throws InterruptedException {
            //创建Runnable接口的实现类对象
            Thread01 thread01=new Thread01();
            //创建线程对象,通过线程对象来开启我们的线程
            Thread thread=new Thread(thread01);
    
            new Thread(thread01).start();
    
            //main主线程
            for(int i=0;i<20;i++){
                System.out.println("正在学习代码......");
    
            }
        }
    }
    View Code

    多线程下载图片

    package Thread;
    
    import org.apache.commons.io.FileUtils;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    
    /**
     * 练习Thread,多线程下载图片
     *
     * @author ZhaoLu cang on 2021/4/10 0010
     */
    public class Thread04 implements Runnable{
    
        private String name;//文件名
        private String url;//地址
    
        public Thread04(String url,String name){
            this.url=url;
            this.name=name;
        }
    
        //执行体
        @Override
        public void run() {
            WebDownloader02 webDownloader=new WebDownloader02();
            webDownloader.downloader(url,name);
            System.out.println("下载的文件名为"+name);
        }
    
        public static void main(String[] args) {
            Thread04 t1=new Thread04("https://pic.cnblogs.com/avatar/1280312/20190419133542.png","我的头像.jpg");
            Thread04 t2=new Thread04("https://5b0988e595225.cdn.sohucs.com/images/20190108/c060afad8f594428a584e5efd8b64f23.jpeg","apache图标.jpg");
            Thread04 t3=new Thread04("https://avatar.csdnimg.cn/1/7/D/1_weixin_43847567_1584060639.jpg","CSDN头像.jpg");
    
            new Thread(t1).start();
            new Thread(t2).start();
            new Thread(t3).start();
    
        }
    }
    
    class WebDownloader02{
        //下载方法
        public void downloader(String url,String name){
            try {
                //爬取从地址到文件
                FileUtils.copyURLToFile(new URL(url),new File(name));
            }catch (IOException e){
                System.out.println("IO异常,downloader方法"+e);
            }
            }
    
    }
    View Code

    实现Callable接口

    多线程下载图片

    package Thread;
    
    import org.apache.commons.io.FileUtils;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    import java.util.concurrent.*;
    
    /**
     * 线程创建方式三:Callable
     *
     * @author ZhaoLu cang on 2021/4/10 0010
     */
    public class ThreadCallable implements  Callable<Boolean>{
        private String name;//文件名
        private String url;//地址
    
        public ThreadCallable(String url,String name){
            this.url=url;
            this.name=name;
        }
    
        //执行体
        @Override
        public Boolean call() {
            WebDownloader01 webDownloader=new WebDownloader01();
            webDownloader.downloader(url,name);
            System.out.println("下载的文件名为"+name);
            return true;
        }
    
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            ThreadCallable t1=new ThreadCallable("https://pic.cnblogs.com/avatar/1280312/20190419133542.png","我的头像.jpg");
            ThreadCallable t2=new ThreadCallable("https://5b0988e595225.cdn.sohucs.com/images/20190108/c060afad8f594428a584e5efd8b64f23.jpeg","apache图标.jpg");
            ThreadCallable t3=new ThreadCallable("https://avatar.csdnimg.cn/1/7/D/1_weixin_43847567_1584060639.jpg","CSDN头像.jpg");
            //创建执行服务
            ExecutorService ser= Executors.newFixedThreadPool(3);
    
            //提交执行
            Future<Boolean> r1=ser.submit(t1);
            Future<Boolean> r2=ser.submit(t2);
            Future<Boolean> r3=ser.submit(t3);
    
            //获取结果
            boolean rs1=r1.get();
            boolean rs2=r2.get();
            boolean rs3=r3.get();
    
            //关闭服务
            ser.shutdown();
        }
    }
    
    class WebDownloader01{
        //下载方法
        public void downloader(String url,String name){
            try {
                //爬取从地址到文件
                FileUtils.copyURLToFile(new URL(url),new File(name));
            }catch (IOException e){
                System.out.println("IO异常,downloader方法"+e);
            }
        }
    
    }
    View Code
  • 相关阅读:
    HDU 5912 Fraction (模拟)
    CodeForces 722C Destroying Array (并查集)
    CodeForces 722B Verse Pattern (水题)
    CodeForces 722A Broken Clock (水题)
    CodeForces 723D Lakes in Berland (dfs搜索)
    CodeForces 723C Polycarp at the Radio (题意题+暴力)
    CodeForces 723B Text Document Analysis (水题模拟)
    CodeForces 723A The New Year: Meeting Friends (水题)
    hdu 1258
    hdu 2266 dfs+1258
  • 原文地址:https://www.cnblogs.com/zlc364624/p/14641497.html
Copyright © 2011-2022 走看看