多线程
创建启动一个线程
创建一个线程大概分为下面几步
- 自定义线程类继承Thread类
- 重写
run方法,编写线程执行体
- 创建线程对象,调用
start方法启动线程
在继承Thread类时,首先要重写run方法,即把需要在多线程里面实现的逻辑写到run方法中
1
2
3
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
|
public class MyThread extends Thread{
@Override
public void run() {
// run方法
for (int i = 0; i < 20; i++) {
System.out.println("我在看代码!");
}
}
public static void main(String[] args) {
// main线程
// 创建一个线程
MyThread mt = new MyThread();
// 调用start来开启线程
mt.start();
// 程序还是串行执行的
mt.run();
for (int i = 0; i < 20; i++) {
System.out.println("主线程");
}
}
}
|
与run方法不同的是,start方法会额外开启一个新的线程来执行run方法里面的逻辑,而调用run缺不会额外开启一个新的线程。
多线程下载器
把一些业务逻辑放在run方法里面,我们就可以使用多线程来进行一些业务逻辑处理。
首先构建好一个下载器
1
2
3
4
5
6
7
8
9
|
class DownLoad{
public void downloader(String url, String name) {
// 使用一个FileUtils包来进行书写
try{
FileUtils.copyURLToFile(new URL(url), new File(name));
}catch(IOExpection e)
throw new RuntimeException(e);
}
}
|
构建好下载器后就可以启动线程这些资源
还是三要素
- 继承Thread
- 重写run方法
- 在main线程中new Thread对象,调用start方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public class TestThread extends Thread {
// 定义好name
String name;
String url;
public TestThread(String name, String url) {
// xxxx
}
public void run() {
// 重写run函数
// 使用下载器下载
DownLoader d = new DownLoader();
d.downloader(url, name);
}
public static void main(String[] args) {
// 创建线程
TestThread t1 = new TestThread(xxx, xxx);
TestThread t2 = new TestThread(xxx, xxx);
// 启动start
t1.start();
t2.start();
}
}
|
这样就可以下载好图片。