创建线程方法一:继承Thread类,重写run()方法,调用start开启线程
public class testThread extends Thread {
@Override
//run()方法线程
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("我在看代码"+i);
}
}
public static void main(String[] args) {
//main线程,主线程
//创建一个线程对象
testThread testThread = newtestThread();
testThread.start();
//testThread.run();
for (int i = 0; i < 100; i++) {
System.out.println("我在学习多线程"+i);
}
}
}
练习使用Thread类,多线程下载图片:
package com.jia.base.study;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//练习Thraed,实现多线程下载图片
public class TestThread01 extends Thread{
private String url; //图片地址
private String name; //保存的文件名
public TestThread01(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) {
TestThread01 t1 = new TestThread01("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1604505990737&di=334a92c9fbb6626cd436f5c758cb7c7e&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F56%2F12%2F01300000164151121576126282411.jpg","1.jpg");
TestThread01 t2 = new TestThread01("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1604506174928&di=43cb81f7ba6a12b6de3c47f7521bdf2f&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F64%2F52%2F01300000407527124482522224765.jpg","2.jpg");
TestThread01 t3 = new TestThread01("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1604506174927&di=1d1a5566396a70665fc6ba241cc341ee&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F02%2F38%2F01300000237560123245382609951.jpg","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) {
e.printStackTrace();
System.out.println("io异常,downloader方法出现问题。");
}
}
}
注意:
执行结果1\2\3图片的下载完成顺序与程序顺序不一致。cup调度,多线程同时执行下载。
创建方式二:实现Runnable接口,重写run()方法,执行线程需要丢入Runnable接口实现类,调用start()方法
package com.jia.base.study;
public class TestThread02 implements Runnable {
@Override
//run()线程体
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("我在看代码"+i);
}
}
public static void main(String[] args) {
//创建Runnable接口的实现类对象
TestThread02 testThread02 = new TestThread02();
//创建线程对象,通过线程对象来开启我们的线程,代理
// Thread thread = new Thread(testThread02);
// thread.start();
new Thread(testThread02).start();
for (int i = 0; i < 200; i++) {
System.out.println("我在学习多线程"+i);
}
}
}