一、认识线程
1.进程
进程(Process)是程序的一次动态的执行过程,进程特点:
1)进程是系统运行程序的基本单位。
2)每一个进程都有自己独立的一块内存空间、一组系统资源。
3)每一个进程的内部数据和状态都是完全独立的。
当一个应用程序运行的时候会产生一个进程。
2.线程
线程是进程中执行运算的最小单位,一个进程在其执行过程中可以产生多个线程,而线程必须在某个进程内执行。
线程是进程内部的一个执行单元,是可完成一个独立任务的顺序控制流程,如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为多线程。
多个线程交替占用CPU资源,而非真正的并行执行。
线程和进程既有联系又有区别:
1)一个进程中至少要有一个线程。
2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
3)处理机分配给线程,即真正在处理机运行的是线程。
多线程好处
1)充分利用CPU的资源
2)简化编程模型
3)带来良好的用户体验
二、编写线程类
1.主线程
1) 每个程序至少自动拥有一个线程,成为主线程。Java程序中的public static void main()方法是主线程的入口。
2)产生其他子线程的线程。
3)必须最后完成执行,因为它执行各种关闭动作。
创建线程的步骤:
1)定义一个线程,同时指明这个线程所有执行的代码,即期望完成的功能。
2)创建线程对象。
3)启动线程。
4)终止线程。
2.在Java中创建线程的两种方式
1)继承java.lang.Thread类
编写简单,可直接操作线程
适用于单继承
2)实现java.lang.Runnable接口
避免单继承局限性
便于共享资源
3.继承Thread类创建线程
Thread类的常用方法
方法 | 说明 |
---|---|
void run() | 执行任务操作的方法 |
void start() |
使该线程开始执行 |
void sleep(long millis) | 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行) |
String8 getName() | 返回该线程的名称 |
int getPriority() | 返回该线程的优先级 |
void setPriority(int newPriority) | 更改该线程的优先级 |
Thread.Sxtate getState() | 返回该线程的状态 |
boolean isAlive() | 测试线程是否属于活动状态 |
void join() | 使当前线程暂停执行,等待其他线程结束后再继续执行本线程 |
void interrupt() | 中断线程 |
void yield() | 暂停当前线程,允许其他具有相同优先级的线程获得运行机会 该线程处于就绪状态,不转为阻塞状态 |
首先定义一个类继承Thread类,重写run()方法
public class MyThread extends Thread { @Override public void run() { Thread mainThread = Thread.currentThread(); System.out.println(mainThread.getName());//start调用时结果为thread-0 for (int i = 0; i < 10; i++) { S