文章目录
1 并发和并行
1.1 并发
当系统只有一个CPU时,而多个线程无法同时在一个CPU上运行,此时只能把CPU的运行时间,划分成多个时间片段,在一个线程运行时其余线程处于挂起状态,诸如此称之为
并发
。
1.2 并行
当系统有多个CPU时,当一个CPU处理一个线程,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时运行,诸如此称之为
并行
。
2 程序、进程、线程
2.1 程序
程序:为完成某个特定任务的指令集合,可以使静态的代码、静态的对象。
2.2 进程
进程:是程序的一次执行过程,一个程序至少有一个进程,或者是一个正在运行的程序,是一个动态的过程,拥有自己的声明周期。
2.3 线程
线程:进程可进一步细化为线程,一个进程一般有多个线程,线程就是程序执行的一条路径,可以有多条路径(多线程)。
2.3.1 守护线程
守护线程:是一个服务线程,用来监视和服务其他线程。
- 特点:主线程退出后,不管线程有没有执行完成,都会退出。
2.4 Java多线程
2.4.1 多线程的创建方式
2.4.1.1 继承Thread类,重写run方法
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("MyThread...run...");
}
public static void main(String[] args) {
// 创建MyThread对象
MyThread t1 = new MyThread() ;
MyThread t2 = new MyThread() ;
// 调用start方法启动线程
t1.start();
t2.start();
}
}
2.4.1.2 实现runnable接口,重写run方法
public class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("MyRunnable...run...");
}
public static void main(String[] args) {
// 创建MyRunnable对象
MyRunnable mr = new MyRunnable() ;
// 创建Thread对象
Thread t1 = new Thread(mr) ;
Thread t2 = new Thread(mr) ;
// 调用start方法启动线程
t1.start();
t2.start();
}
}
2.4.1.3 实现callable接口,重写call方法
2.4.1 线程的生命周期
状态 | 解释 |
---|---|
NEW | 创建线程 ,未启动即还没有调用start方法 |
runable | 可运行状态 , 当调用start方法,线程处于可运行状态,等待CPU的调度 |
blocked | 阻塞状态 ,当一个线程试图获取一个对象锁,但是这个对象被其他线程持有,则该线程进入阻塞状态,只有当该线程持有锁是,该线程才是可运行状态 |
waiting | 等待状态 , |