进程,线程
引言:
doc操作系统--单任务操作系统
单任务操作系统的特征:
一次只能执行一个任务
windows系列,apple,linux...多任务,多进程操作系统。
任务:干一件事情,会至少涉及一个或多个进程。
看电视:打开软件,网络开启......
进程:
一个进程中包含多个线程
打开了视频软件:音频解析,图像解析
线程的出现了是为了最大限度的使用cpu资源。
cpu首先需要给当前进程分配资源,内存资源,
分配100M运行空间--音频解析使用,图像解析使用。
当再有信息线程加入的时候,cpu不会再为当前的
进程分配信息资源。
案例:吃饭
人民公社--来一个人开一桌,两个人就二桌。
一桌十分菜。
--资源浪费严重,进程之间的信息交互
困难,异常信息(并发异常)
八个人一桌,一桌十个菜
--信息交互就非常的方便,资源集约
资源争夺--异常信息(并发异常)
Java中的代码就运行在jvm中,就是依赖于线程技术。
java没有能力创建线程,线程都有操作系统进行创建,
Java会调用本地方法,start,os创建线程的时间是随机的。
Java程序启动的时候,找到main方法----创建主线程。
1、什么是进程?
运行中的程序---内存,计时器,寄存器,运算器,
文本段。。。。。。
生命周期:
新的:创建了一个进程
运行:准备好了
等待:等待某一家事情的发生。
就绪:cpu为当前进程分配了内存资源
终止:运行结束释放,异常退出。
2、什么是线程?
cpu执行流的最小单位
感受线程的案例;
for(){}
线程可以改变程序的执行顺序,在同一个时间点,
只有一个线程在运行,其他的都处在等待或阻塞状态。
3、怎么使用线程。
继承Thread重写run方法,
run被称之为线程方法,
启动线程,start:是一个本地方法。
线程等待:wait();
线程唤醒: notify():只唤醒一个线程。
唤醒的是随机线程。
notifyAll();
线程休眠:sleep(1000)
为了防止当前线程独占cpu资源。
线程加入:join
线程让步:yield
4、线程的生命周期?
新的:创建了一个新的线程
public class A extends Thread{
public void run(){
}
}
就绪:
程序执行了start方法,具备了争夺资源的权利
运行:
得到了cpu的使用权,处于运行状态。
阻塞:由于某种原因,导致线程处于阻塞:
同步阻塞:
public void miaoliao(){
count=1;
同步锁机制:
//锁池---其他用户在锁池中等待。
synchronized(){
if(count>0&username=?&userpwd=?){
count--;
}
}
}
等待阻塞:
由于对象执行了wait()--对象方法。
其他阻塞:
程序执行了wait方法
死亡:
线程执行完毕结束,由于异常强制退出。
5、线程调度?
火车调度
L--临时加班火车
T--特快
k--普快(晚点)
D--
G--
F--飞机--民航
第一种方式:优先级别调用
Java中定义了10个级别,但是一般不用
Thread.MAX_PRIORITY====10
min:1
NORM:5
Java对于线程的控制是属于宏观控制,不能做到
微观控制。
线程休眠:
线程让步:
线程等待:
......