继承Thread类

程序 进程 线程

一个进程process可以有多个线程thread,如视频中同时听声音、看图像、看弹幕等

  1. 程序是一个静态概念

  2. 进程是动态概念

  3. 一个进程可以包含多个线程,至少一个线程

  4. 线程是cpu调度和执行的单位

线程创建方式

  1. 继承Thread类----Thread class

  2. 实现Runnable接口

  3. 实现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调度执行


例子:

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

  1. 新建一个名为lib的包

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

  1. 右键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异常");
        }
    }
}

输出结果:


posted @ 2021-07-07 16:39  卡卡发  阅读(108)  评论(0)    收藏  举报