多进程概念
- 当前的操作系统都是多任务OS
- 每个独立执行的任务就是一个进程
- OS将时间划分为多个时间片(时间很短)
- 每个时间片内将CPU分配给某一任务,时间片结束,CPU自动回收,再分配给另外任务。从外部看,所有任务都是同时在执行,但在CPU上,任务是按照串行依次运行(单核CPU)。如果能多核,多个进程任务可以并行。但是在单核上,多进程只能串行执行。
多进程优点
- 可以同时运行多个任务
- 程序因IO阻塞时,可以释放CPU,让CPU为其他程序服务
- 当系统有多个CPU时,可以为多个程序同时服务
– 现在CPU不在是提高频率,可是增加核数
– 多核和并行程序才是提高程序性能的唯一办法
多进程缺点
- 太笨重,不好管理
- 不好切换,重新去其他进程,需要加载
多线程概念
- 一个程序可以包括多个子任务,可串,可并
- 每个子任务可以称为一个线程
- 如果一个子任务阻塞,程序可以将CPU调度到另外一个子任务进行工作。这样CPU还是保留在本程序中,而不是被调度到别的进程去。这样,提高了本程序所获得的CPU时间和利用率
多线程优点
- 线程共享数据
- 线程通讯更加高效
- 线程更加轻量级,更容易切换
- 多个线程更容易管理
JAVA多线程实现
- java.lang.Thread
– 线程继承Thread类,实现run方法
- java.lang.Runnable接口(Java四大接口之一)
– 线程实现Runnable接口,实现run方法
多线程启动
- start方法,会自动以新进程调用run方法(底层使用JNI实现)
- 直接调用run方法,将会变成串行执行
- 同一个线程,多次start会报错,只执行第一次start方法
- 多个线程启动,其启动顺序先后是随机的,完全由系统来主导
- 线程无需关闭,只要其run方法执行结束,自动关闭
- main函数(线程)可能早于新线程结束,整个程序并不终止
- 整个程序终止是等所有的线程都终止(包括main函数线程)
Thread类实现多线程
public class Thread1 extends Thread{
public void run()
{
System.out.