黑马程序员技术交流社区

标题: java核心卷学习笔记(线程) [打印本页]

作者: 342508558    时间: 2015-6-21 11:24
标题: java核心卷学习笔记(线程)
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()激活阻塞的线程。


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

其他实现同步的方法:使用阻塞队列
作者: Happe_Sun    时间: 2015-6-21 13:56
谢谢分享
作者: lucien_he    时间: 2015-6-21 14:10
谢谢总结~~
作者: a1224577182    时间: 2015-6-21 22:26
感谢分享!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2