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
  • 相关阅读:
    UIView添加手势
    UIView常见属性设置汇总
    关于页面传值
    有关segue的简介
    alloc
    如何定义静态方法
    一座小城
    清明
    开通博客
    iOS学习之界面间传值
  • 原文地址:https://www.cnblogs.com/zlc364624/p/14641497.html
Copyright © 2011-2022 走看看