Java之多线程
1.1 程序和进程
程序就是一堆静态的代码,存储在硬盘上。程序如果不运行,本质就是一个文件。
程序一次运行产生进程,进程一直向前运行,直到进程结束。
1.2 操作系统的发展
单任务操作系统:一段时间只能运行一个程序(任务)。CPU利用率非常低。
|
|/
引入进程的概念
把程序的一次运行产生进程(内存空间、资源、程序的执行堆栈)
进程作为操作系统分配资源的基本单位。
|
|/
多任务操作系统
一台电脑就一个CPU,多个任务轮流使用CPU,从宏观上看,一段时间有多个任务正在运行。
从微观上看,一个时间点只有一个任务在运行。
CPU时间片
多个进程通过CPU时间片轮转实现多任务(进程)。把这种现象叫做并发操作
并行:
多个CPU运行各自的进行。
|
|/
线程的引入
解决实时性问题
1.3 进程和线程区别
综合性案例
1.4 多线程实现
Thread 类位于java.lang中,表示进程中的执行线程。实现多线程有两种方式
[1] 继承Thread接口,重写run方法
1 public class MyThread extends Thread { 2 3 @Override 4 public void run() { 5 System.out.println("我是多线程MyThread"); 6 for (int i = 0; i < 5; i++) { 7 System.out.println("MyThread:" + i); 8 } 9 } 10 }
1 public class Test01 { 2 public static void main(String[] args) { 3 4 // main开始运行产生一个进程,该进程默认有个主(main)线程 5 // 创建线程 6 MyThread t1 = new MyThread(); 7 // 启动线程 8 t1.start(); 9 10 for (int i = 0; i < 5; i++) { 11 System.out.println("main Thread:" + i); 12 } 13 14 } 15 }
main线程和t1线程抢占CPU 执行。多线程在提高CPU利用率的同时,增加程序的复杂度。
[2]实现Runnable接口,实现run方法
1 public class MyRun implements Runnable { 2 3 @Override 4 public void run() { 5 System.out.println("我是MyRun"); 6 for (int i = 0; i < 5; i++) { 7 System.out.println("my run:" + i); 8 } 9 } 10 }
1 public class Test02 { 2 public static void main(String[] args) { 3 4 MyRun run = new MyRun(); 5 Thread t1 = new Thread(run); 6 t1.start(); 7 8 // main开始运行产生一个进程,该进程默认有个主(main)线程 9 for (int i = 0; i < 5; i++) { 10 System.out.println("main Thread:" + i); 11 } 12 } 13 }