线程创建*
Thread、Runnable、Callable
三种创建方式
- Thread class*
- Runnable 接口*
- Callable 接口
Thread
学习提示:查看JDK帮助文档
- 自定义线程类继承Thread类
- 重写run()方法,编写线程执行体
- 创建线程对象,调用start()方法启动线程
代码
// 创建线程方式一:继承Thread类,重写run() 方法,调用start开启线程
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);
}
}
}
小结
注意:线程开启不一定立即执行,由CPU调度执行
案例:下载图片
代码
// 第一步:先导包:commons-io-2.6.jar
// 练习Thread,实现多线程同步下载图片
public class TestThread2 extends Thread{
private String url; // 网络图片地址
private String name; // 保存的文件名
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 t1 = new TestThread2("https://i2.hdslb.com/bfs/face/83bb511365da513c55aa3d1958524f3b7db40684.jpg@96w_96h_1c_1s.webp","1.jpg");
TestThread2 t2 = new TestThread2("https://i2.hdslb.com/bfs/face/83bb511365da513c55aa3d1958524f3b7db40684.jpg@96w_96h_1c_1s.webp","2.jpg");
TestThread2 t3 = new TestThread2("https://i2.hdslb.com/bfs/face/83bb511365da513c55aa3d1958524f3b7db40684.jpg@96w_96h_1c_1s.webp","3.jpg");
t1.start();
t2.start();
t3.start();
}
}
//下载器
class WebDownloader{
// 下载方法
public void downloader(String url,String name){
try{
FileUtils.copyURLToFile(new URL(url),new File(name));
}catch(IOException e){
System.out.println("IO异常,Downloader方法出现问题");
}
}
}