作者:黄文海[中国] 读书日期:20180531 ~
1.基础知识:
1.1线程的概念和创建
进程(Process)是指程序运行实例,是程序向操作系统申请资源(内存空间、文件句柄)的最小单位。
线程(Thread)是进程的可执行的最小单位,一个进程可以包含一个或者多个线程,同个进程中的线程共享进程中的资源。
任务是指线程所要完成的计算。
创建线程有2种方法,对应Thread类的2个构造方法:
public Thread()
public Thread(Runnable target)
- 创建Thread类或者其子类的一个实例。
- 创建一个实现Runnable接口的实例,并将该实例作为Thread的构造方法的参数。
下面时用两种方法创建线程的一个例子:
public class ThreadBasic {
//直接继承Thread或者其子类。
class ThreadWelcome extends Thread{
@Override
public void run() {
System.out.println("2. Welcome . I'm " + Thread.currentThread().getName());
}
}
//定义一个实现了Runnable接口的类,再将该类作为Thread构造方法的参数来创建线程。
class ThreadWelcome1 implements Runnable{
@Override
public void run() {
System.out.println("3. Welcome . I'm " + Thread.currentThread().getName());
}
}
public static void main(String[] args) {
ThreadBasic tb = new ThreadBasic();
Thread tw = tb.new ThreadWelcome();
ThreadWelcome1 tw1 = tb.new ThreadWelcome1();
Thread tw2 = new Thread(tw1);
tw.start();
tw2.start();
System.out.println("1. Welcome . I'm " + Thread.currentThread().getName());
}
}
run()方法是java虚拟机来调用的,不需要在程序中写代码调用Thread.run()方法,否则会出错。线程包含4个主要属性,分别是编号(id);名称(Name);线程类别(true表示守护进程,false表示用户进程);优先级(Priority)。守护进程不会影响Java虚拟机的正常停止,而虚拟机会等待所有用户进程结束后,才正常结束。Thread的常用方法包括:run(),start(),join(),yield(),sleep(),currentThread()。
假设线程A所执行的代码创建了线程B,那么,习惯上称线程B为线程A的子线程。Java无法通过API获得一个线程的父线程。
1.2线程的生命周期
1.3多线程下载实例
下面是一个通过多线程实现下载功能的一个程序。
网友评论