java并发编程实践学习笔记一
介绍在早期的分时共享系统中,每个进程都是一个虚拟的冯诺依曼机。他们拥有一个内存空间,存储着指令和数据,根据机器语言的语义来顺序的执行指令。线程允许程序控制流的多重分支同时存在于一个进程中,他们共享进程范围内的资源。线程有些时候也被称为轻量级进程。并且大多数现代操作系统把线程作为时序调度的基本单元。 线程的优点线程能通过把异步的工作流程转化为普遍存在的顺序流程,使得程序更容易读写和维护。在多处理器的硬件环境中,使用多线程可以更加有效的使用硬件的资源。 线程的风险在没有充分同步的情况下,多线程中的各种操作的顺序是不可预测的。常见的并发危险还有竞争条件。因为线程共享相同的内存地址空间,并发的运行,他们可能访问或修改其它的线程正在使用的变量。在缺少同步的时候,编译器,硬件和运行时事实上对时间和活动顺序是很随意的,比如在寄存器或高速缓冲中的存储变量,这样会使得他们对于其它线程暂时不可见的。它能提高性能,但是给开发带来了困难。活跃度失败的风险,当一个活动进入某种它永远无法继续再执行的状态时,活跃度失败就会发生了。活跃度失败有多种形式,如死锁(deadlock)、饥饿(starvation)、活锁(livelock)。多线程程序还存在性能危险。 线程安全无论何时,只要有多于一个的线程访问给定的状态变量,而且其中某个线程会写入该变量,此时必须使用同步来协调线程对该变量的访问。 当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步以及在调用方代码不必作其它的协调,这个类的行为仍然时正确的,那么称这个类时线程安全的。 对线程安全类的实例进行顺序或并发的一系列操作,都不会导致实例处于无效状态。无状态对象永远是线程安全的。
