一. 单线程的机制: 遵循主循环/轮询机制.
- 单线程控制无线循环
- 轮讯一个事件序列来决定下一步做什么
- 一旦轮询装置返回信号,执行事件处理程序
- 直到事件处理程序完成 (如果此时事件处理程序被阻止,意味着一个线程因为等待资源时阻塞(block,挂起执行),整个程序停止运行
Note: 事件序列:
二. 多线程的机制:取消主循环/轮询机制.
一个线程可以暂停而不影响程序的其他部分。例如,当一个线程从网络读取数据或等待用户输入时产生的空闲时间可以被利用到其他地方。 多线程允许循环中在每一帧间隙中沉睡一秒而不暂停整个系统。简单说:在Java程序中出现线程阻塞,仅有一个线程暂停,其他线程继续运行。
Note: 帧是网络通信层中数据传输的最小单位。
三. 线程的状态
- 正在运行running
- 运行的程序可以被挂起(suspend)
- 临时中断
- 挂起的程序可以被恢复Resume
- 等待资源时候被堵塞block
四. 线程优先级
线程的优先级是用来决定何时从一个运行的线程切换到另一个。这叫“上下文转换”(context switch)。转换规则:
五. 同步性
因为多线程在你的程序中引入了一个异步行为,所以在你需要的时候必须有加强同步性的方法.
举例来说,如果你希望两个线程相互通信并共享一个复杂的数据结构,例如链表序列,你需要某些方法来确保它们没有相互冲突。也就是说,你必须防止一个线程写入数据而另一个线程正在读取链表中的数据。这个方法称为管程(monitor)
六. 异步性
多线程促成了异步性特征,异步的意思是在不同的时间点上,执行不同的任务
七. 消息传递
Java的消息传递系统允许一个线程进入一个对象的一个同步方法,然后在那里等待,直到其他线程明确通知它出来
八. Thread 类和Runnable接口
Thread类封装了线程的执行,为创建一个新的线程,你的程序必须扩展Thread 或实现Runnable接口
Thread类定义了好几种方法来帮助管理线程。本章用到的方法如表所示:
方法 | 意义 |
getName | 获得线程名称 |
getPriority | 获得线程优先级 |
jsAlive | 判定线程是否仍在运行 |
join | 等待一个线程终止 |
run | 线程的入口点. |
sleep | 在一段时间内挂起线程 |
start | 通过调用运行方法来启动线程 |