hbf548

多看源码多读书

0%

继承Thread类

# 开启线程
  • 自定义线程类继承Thread类,
  • 重写run() 方法,编写线程知兴替
  • 创建线程对象,调用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
25
//创建线程方式:继承Thread类, 重写run()方法,调用start开启线程
public class Thread01 extends Thread{

@Override
public void run() {
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在写代码==========" + i);
}
}

public static void main(String[] args) {

//创建一个线程对象
Thread01 thread01 = new Thread01();

//调用start方法,开启线程,调用当前线程的run方法
thread01.start();

//mian线程,主线程
for (int i = 0; i < 2000; i++) {
System.out.println("我在学习======="+i);
}
}
}

效果:交替!争抢线程

image

总结:

  • 线程开启不一定,立即执行,由cpu调度
  • start方法启动当前线程,调用run方法
  • 不能通过run()方法启动线程,因为它没有开启另一个线程,依旧是主线程(main)在跑,而且按照方法前后顺序跑

imageimage

  • 不能让已经start过的线程,再次开启。因为下第一次调用start,它的状态是0,再次调用的时候,它的状态就不是0了,所以报一个异常。
image 想要再次启动需要重新创建一个线程 image

案例:下载图片

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//联系Thread, 实现多线程同步下载
public class TestThread02 extends Thread{

private String url; //网络图片地址
private String name; //保存文件名

private TestThread02(String url, String name) {
this.url = url;
this.name = name;
}

//下载图片的线程执行体
@Override
public void run() {
WebDownload webDownload = new WebDownload();
webDownload.download(url, name);
System.out.println("下载了文件名为:" + name);
}

public static void main(String[] args) {
TestThread02 t1 = new TestThread02("https://mmbiz.qpic.cn/mmbiz_jpg/uChmeeX1FpyB6WkMTL2IUapfTtGH6FFOialcoD9IRXH5jUskMiaHfPd8AKmWZYGAerLH3bpulF72IYhrK2kuia9Pg/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1","1.png");
TestThread02 t2 = new TestThread02("https://mmbiz.qpic.cn/mmbiz_jpg/uChmeeX1FpyB6WkMTL2IUapfTtGH6FFOialcoD9IRXH5jUskMiaHfPd8AKmWZYGAerLH3bpulF72IYhrK2kuia9Pg/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1","2.png");
TestThread02 t3 = new TestThread02("https://mmbiz.qpic.cn/mmbiz_jpg/uChmeeX1FpyB6WkMTL2IUapfTtGH6FFOialcoD9IRXH5jUskMiaHfPd8AKmWZYGAerLH3bpulF72IYhrK2kuia9Pg/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1","3.png");


t1.start();
t2.start();
t3.start();
}
}

//下载器
class WebDownload {
//下载方法
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方法出现问题");
}
}
}
image 发现下载顺序是不一样的