一、程序、线程、进程的关系
- 程序是静态的代码
- 进程是执行程序的过程,是动态的
- 线程是由进程细分出来的,例如一个程序在同一时间执行多线程,那程序就是支持多线程的。
二、什么时候需要多线程
- 程序需要同时执行多个任务
- 程序需要执行耗时任务
三、创建多线程的方式
创建多线程有两种方式: 继承Thread类、实现Runnable接口
方式一:继承Thread类
Thread类是java.lang包中的一个类,Thread类的对象代表进程,继承Thread类来启动线程的步骤 4步
- 创建一个类继承Thread类
- 重写 run() 方法
- 创建该类对象
- 对象名.start的方法启动线程
补充:创建名为threadName 的线程使用
public Thread(String threadName)
Thread类常用方法
join() | 插队 |
---|---|
join(ms) | 插队可以持续多长时间,过了之后不能再插队不然会被揍 |
setPriority( int ) | 设置优先级 越大越好 1-10 |
sleep(ms) | 睡眠 |
方式二: 实现Runnable接口
单继承 多接口
- 创建Runnable对象
- 将Runnable对象作为参数,创建Thread对象
- Thread对象名.start()
package com.runnable;
class PrintRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i <20; i++) {
System.out.println(Thread.currentThread().getName()+"hello"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Test {
public static void main(String[] args) {
PrintRunnable pr =new PrintRunnable();
Thread th=new Thread(pr);
th.start();
PrintRunnable pr1 =new PrintRunnable();
Thread th1=new Thread(pr1);
th1.start();
}
}
四、线程的生命周期
五种状态 : 出生、就绪、运行、暂停、死亡
- 出生: 线程被创建
- 就绪: start(),等待cpu
- 运行: 得到cpu运行资源
- 暂停:sleep()、wait ()
- 死亡: run() 执行完
线程的休眠
使用sleep()方法可能需要抛出异常
线程的同步
Java使用同步机制 来保证 同一时间只允许一个进程访问共享资源
同步块
同步机制使用 synchronization关键字
synchronization(Object){
操作共享区域的代码
}