zthread学习 实例十五ZThread库基本结构的规纳
来源:互联网 发布:手机编程前景 编辑:程序博客网 时间:2024/04/29 02:34
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学习 实例二
- IBM的ZThread库
- zthread学习 实例五 非任务对象的生存期
- zthread学习 实例十 线程间的协助(一)
- zthread学习 实例十 线程间的协助(二)
- zthread学习 实例五 非任务对象的生存期
- zthread学习 实例十 线程间的协助(一)
- zthread学习 实例十一 线程间的协助(二)
- zthread学习 实例四 让步、休眠、优先级
- zthread学习 实例六 访问控制
- zthread学习 实例七 线程本地存储
- zthread学习 实例十一 信号量机制
- zthread学习 实例四 让步、休眠、优先级
- zthread学习 实例六 访问控制
- zthread学习 实例七 线程本地存储
- zthread学习 实例十四 信号量机制
- 条款15:在资源管理类中提供对原始资源的访问
- SPRING技术内幕:深入解析SPRING架构与设计原理(第2版)-笔记(三)AOP概念
- hinernate 一对一、一对多、多对多举例
- My97DatePicker 输入框 的用法
- zthread学习 实例十五ZThread库基本结构的规纳
- Impala 教程
- java.io.FileNotFoundException: /mnt/sdcard/yuan.txt (Permission denied) at org.apache.harmony.luni.p
- java笔记--关于线程同步(5种同步方式)
- UML统一建模语言
- hihocoder #1099 : Constellations
- SPRING技术内幕:深入解析SPRING架构与设计原理(第2版)-笔记(四)AOP设计与实现
- 步步为营_Android开发课[37]_用户界面之theme和style
- C# 对文件与文件夹的操作包括删除、移动与复制