java多线程

来源:互联网 发布:maven 打包 java 工程 编辑:程序博客网 时间:2024/06/10 23:47

.1.     java多线程基本知识

.1.1.   进程介绍

进程是对正在运行程序的抽象,是程序的一次执行过程。进程是作为资源申请和调度的存在。

进程的状态分为新建态、就绪态、运行态、阻塞态、终止态。

进程由PCB(进程控制块)、栈(保存过程调用和互相传送参数的踪迹)、程序、数据集合。

.1.2.   线程介绍

  线程是进程中执行运算的最小单位。一个进程可以有多个线程,至少有一个线程。资源分配给进程,同一进程的所有线程共享该进程的所有资源。CPU分配给线程。

.1.3.   信号量及P、V操作原语

P(S) : S为信号量。S--, 如果S>=0, 进程继续执行,如果S<0,进程阻塞。

V(S)  :   S为信号量。S++, 如果S>0, 进程继续执行,如果S<=0,唤醒等待进程队列中的第一个进程,该进程继续执行。

用信号量实现进程互斥:

 S=1;

进程Pa                  进程Pb

P(S)                         P(S)

(业务代码)          (业务代码))

V(S)                         V(S)

分析:当进程Pa运行时,进行P操作,S=0,这时假设Pb抢占运行权,Pb进行P操作,S=-1,Pb阻塞。Pa重新运行,(业务代码)后进行V操作,S=0,唤醒Pb。

    Pa进行P操作,S=-1,Pa阻塞。或者是Pb抢占运行权,(业务代码)后进行V操作。S=1。(反过来结果也是一样)

使用P、V 操作时,信号量一般初值为1,PV必须成对出现。

用信号量实现进程简单同步:

信号量 S1=1;(0表示不空,1表示空)

信号量 S2=0;(0表示不满,1表示满)