多线程03:线程创建

三种创建方式:
 
一、Thread 学习提示:查看JDK帮助文档
 
  • 自定义线程类继承Thread类
  • 重写run()方法,编写线程执行体
  • 创建线程对象,调用start()方法启动线程

 1 package com.thread.demo01;
 2 
 3 //创建线程方式一:继承Thread类 , 重写run()方法 , 调用start()方法开启线程
 4 
 5 //总结:注意,线程开启不一定立即执行,由cpu调度
 6 
 7 public class TestThread1 extends Thread {
 8     @Override
 9     public void run() {
10         //run方法线程体
11         for (int i = 0; i < 20; i++) {
12             System.out.println("我在看代码---" + i);
13         }
14     }
15 
16     public static void main(String[] args) {
17         //main线程 ,主线程
18 
19         //创建一个线程对象
20         TestThread1 testThread1 = new TestThread1();
21 
22         //调用start()方法开启线程
23         testThread1.start();
24 
25         for (int i = 0; i < 20; i++) {
26             System.out.println("我在学习多线程---" + i);
27         }
28     }
29 }
注意:线程开启不一定立即执行,由cpu调度
 
案例:多线程下载图片
利用commons-io jar包,它是一个类库,别人写好的工具包
没用Maven之前导入jar包的方法:
二:添加jar包
三:检查是否导入,导入成果即可使用
 
思路:
1.想要多线程下载图片。首先写了一个下载器WebDownloader,下载器里面有一个下载方法downloader;通过commons-io工具类库提供的一个FileUtils这个工具类,里面有个方法叫做copyURLToFile,把一个url变成一个文件,需要丢入一个url和一个文件name。然后就会把图片下载下来。
2.下载下来之后,需要去实现一个线程类TestThread02,于是乎继承了一个Thread它就变成了一个线程类。然后丢入url和name用构造器丢入。重写了run()方法,run()方法就是下载图片线程的执行体,线程执行体里面调用了那个下载方法,下载完后输出一下下载了什么东西,比如name。
3.通过构造器去创建了3个线程,通过3个start()去同时启动3个线程。
 1 package com.thread.demo01;
 2 
 3 import org.apache.commons.io.FileUtils;
 4 
 5 import java.io.File;
 6 import java.io.IOException;
 7 import java.net.URL;
 8 
 9 //练习Thread实现一个多线程同步下载图片
10 public class TestThread02 extends Thread {
11 
12     private String url; //网络图片地址
13     private String name;//保存的文件名
14 
15     public TestThread02(String url, String name) {
16         this.url = url;
17         this.name = name;
18     }
19 
20     //下载图片线程的执行体
21     @Override
22     public void run() {
23         WebDownloader webDownloader = new WebDownloader();
24         webDownloader.downloader(url, name);
25         System.out.println("下载了文件名:" + name);
26     }
27 
28     public static void main(String[] args) {
29         TestThread02 t1 = new TestThread02("http://a3.att.hudong.com/35/34/19300001295750130986345801104.jpg", "1.jpg");
30         TestThread02 t2 = new TestThread02("http://file02.16sucai.com/d/file/2014/1028/f445fe013d861d9e99fd70a0734efd8a.jpg", "2.jpg");
31         TestThread02 t3 = new TestThread02("http://img.tuzhaozhao.com/2017/10/25/1f33b154b2da3f51_300x300.jpg", "3.jpg");
32 
33         t1.start();
34         t2.start();
35         t3.start();
36 
37     }
38 }
39 
40 //下载器
41 class WebDownloader {
42     //下载方法
43     public void downloader(String url, String name) {
44         try {
45             FileUtils.copyURLToFile(new URL(url), new File(name));
46         } catch (IOException e) {
47             e.printStackTrace();
48             System.out.println("IO异常,downloader方法出现问题");
49         }
50     }
51 }
52 
53 结果:
54 下载了文件名:1.jpg
55 下载了文件名:3.jpg
56 下载了文件名:2.jpg

 

posted @ 2020-02-04 18:24  断浮  阅读(122)  评论(0编辑  收藏  举报