编制的程序运行是一个过程,一个过程可以包含多个线程(单核CPU宏观并行,微观串行)。
调用start(()实现多线程(继承)Thread类)
package thread; //创建线程方式一:继承Thread类,重写run()方法,调用start()打开线程。 ///线程打开后不必立即执行,由CPU调度执行 public class TestThread01 extends Thread { @Override public void run() { //run方法线程体 for (int i = 0; i < 10; i ) { System.out.println("run进程" i); } } public static void main(String[] args) { //main线程,主线程 TestThread01 testThread01 = new TestThread01(); testThread01.start(); ///子线程执行run() //testThread01.run(); 调用普通方法,主线程执行run() for (int i = 0; i < 1000; i ) { System.out.println("main进程" i); } } }
下载commons.io jar包实现多线程下载网络图片。Thread类)
package thread; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; public class TestThread02 extends Thread { private String url; private String name; //有参结构 public TestThread02(String url, String name){ this.url = url; this.name = name; } @Override public void run() { Download d = new Download(); d.download(url, name); System.out.println("下载图片名为:" name); } public static void main(String[] args) { TestThread02 t1 = new TestThread02("https://i0.hdslb.com/bfs/album/af3d104fec1dbbd0d827b9303b7fa43a57a96269.jpg@518w.webp", "Yoimiya01.jpg"); TestThread02 t2 = new TestThread02("https://i0.hdslb.com/bfs/album/8b8784a26770bee9d3db0a05dba39eb628f5c253.jpg@518w.webp", "Yoimiya02.jpg"); TestThread02 t3 = new TestThread02("https://i0.hdslb.com/bfs/album/b361130f2e9e22c70de450295dadaf25654cf012.jpg@518w.webp", "yunjin.jpg"); t1.start(); t2.start(); t3.start(); } } class Download { public void download(String url, String name){ try { FileUtils.copyURLToFile(new URL(url), new File(name)); } catch (IOException e) { e.printStackTrace(); System.out.println("IO异常,download方法有问题"); } } }
使用多线程下载网络图片。Runnable接口)
package thread; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; ///创建线程模式2:实现Runnable接口,重写run()方法,执行线程需要输入Runnable接口实现类,调用start()方法。 public class TestThread03 implements Runnable { private String url; private String name; public TestThread03(String url, String name){ this.url = url; this.name = name; } @Override public void run() { Download01 d = new Download01(); d.download(url, name); System.out.println("下载图片名为:" name); } public static void main(String[] args) { //创建Runnable接口类实现对象 TestThread03 tt1 = new TestThread03("https://i0.hdslb.com/bfs/album/701b99929ee3c4dec758b7191d3894b257238190.jpg@518w.webp", "Yoimiya03.jpg"); TestThread03 tt2 = new TestThread03("https://i0.hdslb.com/bfs/article/311a9d65f3f58baac2706ce5edc839127b089f2e.jpg@942w_1290h_progressive.webp", "Yoimiya04.jpg"); TestThread03 tt3 = new TestThread03("https://i0.hdslb.com/bfs/album/bfa49f3297f6dbff8b9038d72baf78421d44c90c.jpg@518w.webp", "Yoimiya05.jpg"); //创建线程对象,线程通过线程对象打开 new Thread(tt1).start(); new Thread(tt2).start(); new Thread(tt3).start(); } } class Download01 { public void download(String url, String name){ try { FileUtils.copyURLToFile(new URL(url), new File(name)); } catch (IOException e) { e.printStackTrace(); System.out.println("IO异常,download方法有问题"); } } }