程序:main线程 gc守护线程 (JVM创建的 用于垃圾回收)
02 线程创建
线程创建的三种方式
- Thread class
- Runnable 接口
- Callable 接口(工作之后用的多)
Java虚拟机允许同时执行多个线程
03 继承Thread类
线程创建方式1:
1、继承Thread类,重写run()方法,调用start()开启线程
线程启动需要时间,线程开启不一定立即执行,需要CPU调度执行
demo例子
package threadLearn.demo01;
public class TestThread1 extends Thread{
@Override
public void run() {
//run 方法线程体
for (int i = 0; i<20;i++){
System.out.println("我在看代码---"+i);
}
}
public static void main(String[] args) {
//main线程,主线程
//创建一个线程对象
TestThread1 testThread1 = new TestThread1();
//调用start()方法开启线程
testThread1.start();
for (int i=0;i<20;i++){
System.out.println("我在学习多线程---"+i);
}
}
}
04 网图下载
多线程下载网图
package threadLearn.demo01;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//练习Thread,实现多线程同步下载图片
public class TestThread2 extends Thread{
private String url;//网络图片地址
private String name;//保存的文件名
public TestThread2() {
}
public TestThread2(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) {
TestThread2 th1 = new TestThread2("https://n.sinaimg.cn/news/transform/350/w210h140/20210713/a5f2-b6ea01a4a9952832066c1bc25dfa04e7.jpg","20210713_1.jpg");
TestThread2 th2 = new TestThread2("https://n.sinaimg.cn/news/transform/350/w210h140/20210713/64a8-8bf9fb26cdea87a38a446e5c1c685c4c.jpg","20210713_2.jpg");
TestThread2 th3 = new TestThread2("https://n.sinaimg.cn/ent/transform/175/w105h70/20210713/4047-3aee4bc841cadc336b7104473218c732.jpg","20210713_3.jpg");
th1.start();
th2.start();
th3.start();
}
}
class WebDownloader{
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方法出现问题");
}
}
}
05 实现Runnable接口
package threadLearn.demo01;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//练习Thread,实现多线程同步下载图片
public class TestThread2 implements Runnable{
private String url;//网络图片地址
private String name;//保存的文件名
public TestThread2() {
}
public TestThread2(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) {
TestThread2 th1 = new TestThread2("https://n.sinaimg.cn/news/transform/350/w210h140/20210713/a5f2-b6ea01a4a9952832066c1bc25dfa04e7.jpg","20210713_1.jpg");
TestThread2 th2 = new TestThread2("https://n.sinaimg.cn/news/transform/350/w210h140/20210713/64a8-8bf9fb26cdea87a38a446e5c1c685c4c.jpg","20210713_2.jpg");
TestThread2 th3 = new TestThread2("https://n.sinaimg.cn/ent/transform/175/w105h70/20210713/4047-3aee4bc841cadc336b7104473218c732.jpg","20210713_3.jpg");
new Thread(th1).start();
new Thread(th2).start();
new Thread(th3).start();
}
}
class WebDownloader{
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方法出现问题");
}
}
}