A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 342508558 中级黑马   /  2015-6-21 11:24  /  373 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.进程与线程

        代码的运行必须要获得cup等资源的的使用权。

进程:早起的计算机,同时只能运行一个程序,系统运行效率、资源利用率都较低。为此引入了多道程序的技术,使程序能够并发执行。对可以并发执行的程序加以描述和控制,引入了“进程”的概念。进程由PCB,程序段,相关数据段构成。

        进程的状态:创建、就绪<活动就绪、静止就绪(就绪状态被挂起)>、执行、阻塞<活动阻塞,静止阻塞(阻塞状态被挂起)>、终止。

os内核对进程的操作(原语):创建、终止、阻塞(阻塞、唤醒)、挂起(挂起、激活)。

由于进程间需要相互协调工作、对资源互斥访问等,需要同步机制。软件同步机制<较少使用>硬件同步机制<关中断、TS指令、XCHG指令>、信号量机制、管程机制等。可见进程的管理、调度等是操作系统层面的。

线程:在但处理机环境下,进程一直作为拥有资源和独立调度的基本单位。随着多处理机系统的推出,OS引入了线程。进程的创建、切换需要分配较多资源、保存较多的cpu状态,开销较大。线程不拥有独立的资源<仅少量自己的必要资源>,作为独立调度的基本单位,创建和切换开销较进程小。

内核支持线程:可以直接接受调度。

用户级线程:有用户管理,接受调度时仍以进程为单位。

组合方式:多(用户)对一(内核),一对一,多对多。

jvm在windows下的线程是内核支持线程,在Linux下是一对一模式。

线程中断:结束线程的某种状态。

isInterrupted()返回中断状态。<false未中断;阻塞状态调用该方法会抛出InterruptedException异常>

interrupted()静态方法,返回中断状态,并将终端状态设为false;

interrupt() 中断请求,中断状态设为true,若sleep,抛出异常。
getState()获得线程当前状态<New,Runnable,Blocked,Waiting,Time waiting,Terminated>

不同状态会进入不同的队列,等待调度<改变状态>。

线程同步:

ReentrantLock:

lock(),unlock()没有锁的被阻塞

tryLock()尝试获得锁,不阻塞。

条件对象:

Condition    =ReentrantLock.newCondition()
Condition.await()当前线程阻塞,放弃锁

Condition .signalAll()激活因为当前条件阻塞的线程,接着await()之后开始执行
推荐使用:while(条件) Condition.await();


Synchronized:

wait()线程进入阻塞。

notifyAll()激活阻塞的线程。


当发生死锁时,程序将被挂起。

其他实现同步的方法:使用阻塞队列

3 个回复

倒序浏览
谢谢分享
回复 使用道具 举报
谢谢总结~~
回复 使用道具 举报
感谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马