多线程下载图片(继承thread/实现接口runnable)

下载图片

自定义线程类继承Thread类
重写run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程

继承thread,重写run()

package Thread.Demo02;

import org.apache.commons.io.FileUtils;

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

/**自定义线程类继承Thread类
 * 重写run()方法,编写线程执行体
 *创建线程对象,调用start()方法启动线程
 * @author liu
 */
//联系thread,实现多线程同步下载
public class DownLoadA extends Thread {
    private String url;//网络图片地址
    private String name;//保存的文件名

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

//下载图片线程的执行体
    @Override
    public void run() {
        webDownLoader wdl = new webDownLoader();
        wdl.webDownLoader(url, name);
        System.out.println("下完了:" + name);
    }


    //创建下载器
    class  webDownLoader {
        //下载方法
        public void webDownLoader(String url, String name) {
            try {
                FileUtils.copyURLToFile(new URL(url), new File(name));
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("IO异常,downloader出现问题");
            }
        }
    }
}

创建对象,调用start()

package Thread.Demo02;


/**自定义线程类继承Thread类
 * 重写run()方法,编写线程执行体
 *创建线程对象,调用start()方法启动线程

 * @author liu
 */
public class Demo01 {
    public static void main(String[] args) {
//3个对象运行
        DownLoadA dl1 = new DownLoadA("https://baikebcs.bdimg.com/adpic/00%E5%A4%A7%E5%92%96/%E8%83%A1%E9%80%82%E6%96%B0%E6%82%AC%E6%B5%AE.png", "花.png");
        DownLoadA dl2 = new DownLoadA("https://baikebcs.bdimg.com/adpic/00%E5%A4%A7%E5%92%96/%E9%B2%81%E8%BF%85%E6%96%B0%E8%BD%AE%E6%92%AD.JPG", "树.jpg");
        DownLoadA dl3 = new DownLoadA("https://baikebcs.bdimg.com/%E7%A7%92%E6%87%82%E7%A1%AC%E6%A0%B8%E6%A0%A1%E5%9B%AD.png", "房.png");
        dl1.start();
        dl2.start();
        dl3.start();
    }
}

龟兔赛跑

  • 实现Runnable 接口;
  • 重写run()方法,编写线程执行体
  • 创建线程对象,调用start()方法启动线程
package Thread;

public class Demo03 implements Runnable {
    private static  String winner;


    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
            //模拟兔子睡觉
            if(Thread.currentThread().getName().equals("tu")&&i%20==0){
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            boolean flag = gameOver(i);
            if (flag) {
                break;
            }
        }
    }

    public synchronized boolean gameOver(int i){
        if(i>=100){
           winner= Thread.currentThread().getName();
            System.out.println("winner is "+winner);
            return true;
        }else if(winner!=null){
            return true;
        } else {
            System.out.println(Thread.currentThread().getName() + "跑了" + i + "步");
            return false;
        }
    }


    public static void main(String[] args) {
//1个对象,2个线程运行
        Demo03 race = new Demo03();
        new Thread(race,"tu").start();
        new Thread(race,"gui").start();
    }
}
posted @   小幼虫虫  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示