并发的历史
操作系统的发展使得多个程序能够同时运行, 由操作系统来分配资源, 如果需要的话, 进程会通过一些原始的机制相互通信, 主要分为消息传递和共享内存两种:
-
消息传递: Socket, 信号处理(signal handlers), 信号量(semaphores)和文件等.
-
共享内存
线程共享其所属进程的内存地址空间, 因此所有同一进程中的线程访问相同的变量, 并从同一个堆中分配对象, 这相对于进程间通信(inter-process)机制来说实现了良好的数据共享. 但是如果没有明确的同步来管理共享数据, 一个线程可能会修改其他线程正在使用的数据, 产生意外的结果.
线程简介
线程优先级
Java线程中, 通过一个int
变量priority来控制优先级, 范围为1~10, 通过setPriority(int)
方法来修改优先级, 默认优先级是5, 操作系统通常会忽略自己手动设定的线程优先级(比如Mac OS X, Ubuntu等), 作为程序开发者一般也不需要手动调整
线程的状态
一共有6种可能的状态:
状态名称 | 说明 |
---|---|
NEW | 初始状态, 仅被构建, 没有启用start() 方法 |
RUNNABLE | 可运行状态, 将操作系统中定义的’就绪’和’运行’统称为’RUNNABLE’ |
BLOCKED | 阻塞状态, 需要获取锁 |
WAIT |