Thread类实现同步下裁图片:
首先需要在官网下载commons-io-2.6.jar
:传送门
右击:
举例:
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; //准备下载器 class webdownload { //下载方法 public void downloader(String url, String name) { try { FileUtils.copyURLToFile(new URL(url), new File(name)); } catch (IOException e) { e.printStackTrace(); System.out.println("IO异常,downloader方法出现问题"); } } } public class Thread_test extends Thread{ private String url; private String name; public Thread_test(String url,String name){ this.url=url; this.name=name; } @Override public void run() { webdownload webdownload=new webdownload(); webdownload.downloader(url,name); System.out.println("下载成功"+name); } public static void main(String[] args) {//进行下载 Thread_test thread_test1=new Thread_test("https://img2.baidu.com/it/u=1395980100,2999837177&fm=253&app=120&size=w931&n=0&f=JPEG&fmt=auto?sec=1671987600&t=dc660191a7f7ef18d080deaffe75d548","name1"); Thread_test thread_test2=new Thread_test("https://img1.baidu.com/it/u=1605341541,1182642759&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1671987600&t=a82bfa5ed4d6a73504bb53932cfefe3f","name2"); Thread_test thread_test3=new Thread_test("https://img2.baidu.com/it/u=1395980100,2999837177&fm=253&app=120&size=w931&n=0&f=JPEG&fmt=auto?sec=1671987600&t=dc660191a7f7ef18d080deaffe75d548","name3") ; thread_test1.start(); thread_test2.start(); thread_test3.start(); } }
是通过多线程同步下载这三张图片,因此,每次下载的成功的先后顺序是不相同的,具体由CPU决定:
Runnable接口实现同步下载图片:
与上文中的Thread相比,只需要修改下述这两个地方:
从继承Thread变为实现Runnable接口:
需要单独创建线程对象,去调用start()方法:
使用Runnable接口模拟"龟兔赛跑":
public class Race_test implements Runnable { public static void main(String[] args) { Race_test race_test=new Race_test(); //创建线程对象 new Thread(race_test,"乌龟").start(); new Thread(race_test,"兔子").start(); } private static String winner; @Override public void run() { for(int i=0;i<=50;i++){//让兔子"每隔一段时间休息一下" if(Thread.currentThread().getName().equals("兔子")&&i%5==0) { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } boolean flag=gameover(i); if(flag){ break; } System.out.println(Thread.currentThread().getName()+"--------->跑了"+i+"步"); } } private boolean gameover(int steps){//比赛规则 if(winner!=null) { return true; } else{ if(steps>=50) {//判出胜负,比赛结束 winner=Thread.currentThread().getName(); System.out.println("winner is"+winner); return true; } } return false; } }
输出:
乌龟---->跑了0步 兔子---->跑了0步 乌龟---->跑了1步 兔子---->跑了1步 乌龟---->跑了2步 兔子---->跑了2步 乌龟---->跑了3步 兔子---->跑了3步 乌龟---->跑了4步 兔子---->跑了4步 乌龟---->跑了5步 乌龟---->跑了6步 乌龟---->跑了7步 乌龟---->跑了8步 乌龟---->跑了9步 乌龟---->跑了10步 乌龟---->跑了11步 乌龟---->跑了12步 乌龟---->跑了13步 乌龟---->跑了14步 乌龟---->跑了15步 乌龟---->跑了16步 乌龟---->跑了17步 乌龟---->跑了18步 乌龟---->跑了19步 乌龟---->跑了20步 乌龟---->跑了21步 乌龟---->跑了22步 乌龟---->跑了23步 乌龟---->跑了24步 乌龟---->跑了25步 乌龟---->跑了26步 乌龟---->跑了27步 乌龟---->跑了28步 乌龟---->跑了29步 乌龟---->跑了30步 乌龟---->跑了31步 乌龟---->跑了32步 乌龟---->跑了33步 乌龟---->跑了34步 乌龟---->跑了35步 乌龟---->跑了36步 乌龟---->跑了37步 乌龟---->跑了38步 乌龟---->跑了39步 乌龟---->跑了40步 乌龟---->跑了41步 乌龟---->跑了42步 乌龟---->跑了43步 乌龟---->跑了44步 乌龟---->跑了45步 乌龟---->跑了46步 乌龟---->跑了47步 兔子---->跑了5步 乌龟---->跑了48步 兔子---->跑了6步 乌龟---->跑了49步 兔子---->跑了7步 Winner is乌龟