多线程下载图片(继承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();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现