继承Thread类
程序 进程 线程
一个进程process可以有多个线程thread,如视频中同时听声音、看图像、看弹幕等
-
程序是一个静态概念
-
进程是动态概念
-
一个进程可以包含多个线程,至少一个线程
-
线程是cpu调度和执行的单位
线程创建方式
-
继承Thread类----Thread class
-
实现Runnable接口
-
实现Callable接口
法一:
线程启动用start()进入可执行状态,然后执行的时候调用run()方法
package test1;
public class TestThread extends Thread{
@Override
//run方法线程体
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("run线程学习"+i);
}
}
//主线程 main线程
public static void main(String[] args) {
//创建一个线程对象
TestThread testThread=new TestThread();
//调用start()方法
testThread.start();
for (int i = 0; i < 10; i++) {
System.out.println("main线程学习"+i);
}
}
}
输出:
每次执行结果不一样,逻辑上“同时”进行(谁先抢到cpu谁先执行)
线程开启不一定立即执行,由cpu调度执行

例子:
- 首先网上下载一个common-io的jar包【commons-io包是针对开发io流功能的工具类库】

- 新建一个名为lib的包

- 解压后将commons-io-2.10.0.jar复制到lib文件夹里

- 右键add as library

package test1;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//实现多线程下载图片
public class TestThread2 extends Thread{
private String url;
private String filename;
public TestThread2(String url,String filename){
this.url=url;
this.filename=filename;
}
@Override
public void run() {
WebDownloader webDownloader=new WebDownloader();
webDownloader.downloader(url,filename);
System.out.println("图片下载结束名字为"+filename);
}
public static void main(String[] args) {
TestThread2 t1=new TestThread2("http://www.whxzn.com/images/banner/shouhou.jpg","1.jpg");
TestThread2 t2=new TestThread2("http://www.whxzn.com/images/faq/1.jpg","2.jpg");
TestThread2 t3=new TestThread2("http://www.whxzn.com/images/faq/3.jpg","3.jpg");
//"同时"执行
t1.start();
t2.start();
t3.start();
}
}
//下载器
class WebDownloader{
//下载方法
public void downloader(String url,String filename){
try {
FileUtils.copyURLToFile(new URL(url),new File(filename));//网络图片路径,图片下载后的名字
} catch (IOException e) {
e.printStackTrace();
System.out.println("io异常");
}
}
}
输出结果:


浙公网安备 33010602011771号