zthread学习 实例十二 ZThread库基本结构的规纳
来源:互联网 发布:自学java的网站 编辑:程序博客网 时间:2024/06/06 14:02
1、四大基类
Cancelable
Cancelable提供了通用的方法来定义语义,调用了cancel()的Cancelable对象,将被置为disable。调用过cancel()ed的对象不必立即中止工作。通常被cancel()ed的对象尽可能快的继续执行完当前分配给它的工作,然后再变得不可用;但它不能接受任何新分配给它的工作。
cancel()函数:使一个Cancelable对象变为disable状态。拒绝接受新任务,尽可能快的完成当前任务;对一个Cancelable对象多于一次的cancel()操作都是无效的。isCanceled():查询Cancelable对象是否已经是canceled的状态。
Waitable
Waitable提供了通用的方法来定义语义,一个对象可以通过Waitable的接口来测试其内部状态。其他对象可以wait()一个Waitable对象。在这种情况下,如果调用线程的condition为false将会阻塞此线程。举例,Condition是一个Waitable对象,因此它的wait()是意思是阻塞线程直到有外部激励来改变Condition的内部状态为true。还有Barrier、Executor等。
Lockable
Lockable添加了通用方法acquire()、release(),它不一定是互斥访问的。
NonCopyable
一些对象是不能被拷贝的。特别是一些互斥访问的东西,例如,事件对象,队列,信号量等等
2、Mutex种类
Mutex
[定义]:Mutex对象用于串行的访问临界区,通过acquire()进入临界区,release()离开临界区。
[调度方式]:FIFO的顺序。
[异常]:A Mutex will throw a Deadlock_Exception if an attempt to acquire a Mutex more than once is made from the context of the same thread.A Mutex will throw an InvalidOp_Exception if an attempt to release a Mutex is made from the context of a thread that does not currently own that Mutex.
FastMutex
[定义]:FastMutex是一个效率稍微好一点非递归互斥锁。它的实现比其他的Mutex类执行速度快,但这样它却牺牲了它的健壮性。它的一个性质是acquire()和tryAcquire()时不会抛出中断异常。
[调度方式]:由操作系统决定。
[异常]:无
RecursiveMutex
[定义]:它是一种递归的Mutex,因为它可以在同一个线程中多于一次的aquire()/release(),却不会死锁(抛出Deadlock_Exception异常)
[调度方式]:FIFO的顺序。
[异常]: A Mutex will throw an InvalidOp_Exception if an attempt to release() a Mutex is made from the context of a thread that does not currently own that Mutex.
PriorityMutex
[定义]:PriorityMutex类似于其他的Mutex,不同之处在于它有不同于其他Mutex的调度策略。
[调度方式]:如果多个线程争夺调用acquire(),则按线程优先级的顺序来调度,高优先级的线程先进入。
PriorityInheritanceMutex
[定义]:PriorityInheritanceMutex类似于PriorityMutex,不同之处在于它有独特的调度方式。
[调度方式]:也类似于PriorityMutex,高优先级的线程先进入。一个高优先级的线程试图进入acquire(),在即将阻塞优先级的线程时,如果此时这个低优先级的线程已经执行了acquire(),此时它将临
时提高线程的优先级来适应这个调度,一直到执行release()后恢复以前的优先级。
- zthread学习 实例十二 ZThread库基本结构的规纳
- zthread学习 实例十五ZThread库基本结构的规纳
- zthread学习 实例一
- zthread学习 实例二
- zthread学习 实例十二 线程间的协助(三)——死锁
- IBM的ZThread库
- zthread学习 实例五 非任务对象的生存期
- zthread学习 实例十 线程间的协助(一)
- zthread学习 实例十 线程间的协助(二)
- zthread学习 实例五 非任务对象的生存期
- zthread学习 实例十 线程间的协助(一)
- zthread学习 实例十一 线程间的协助(二)
- zthread学习 实例四 让步、休眠、优先级
- zthread学习 实例六 访问控制
- zthread学习 实例七 线程本地存储
- zthread学习 实例十一 信号量机制
- zthread学习 实例四 让步、休眠、优先级
- zthread学习 实例六 访问控制
- 非常好的自己定义jdbc数据库连接池
- 大胆投资自我
- XMLHTTP对象应用开发初体验
- 空间分辨率
- Cannot delete file or folder
- zthread学习 实例十二 ZThread库基本结构的规纳
- Problem 4 求回文数
- 【转】邮件 and 图片
- Tfs 2010使用小技巧
- java中super的两种用法 [转], 有改动
- Android中G-Sensor相关流程
- NoSQL
- treeview递归绑定节点
- iOS 录像录音