September
11th,
2015
UML
略读
Intro 1 Java语言的线程
-
start是Thread类的方法,调用start方法,就会启动新的线程。调用start方法是,会有两个操作:1.启动新线程;2.调用run方法
-
并发与并行,并发:CPU不停切换并操作线程,同时只有一个线程的处理;并行:同时进行一个以上的处理
-
synchronized方法不允许同时有一个以上的线程执行,如果有线程已经获取锁定,同一实例的synchronized方法并不能被其它线程所执行
-
所有的实例都有一个wait set,一执行wait方法,线程会暂时停止操作,进入wait set这个休息室,当有其它线程以notify,notifyAll,interrupt方法唤醒该线程时,线程才会退出wait set。notify和notifyAll是Object的固有方法。
Intro 2 多线程程序的评量标准
- 安全性(必要)、存活性(必要)、复用性、性能
Single Threaded Execution
-
何时使用?数据被多个线程访问时;SharedResource参与者状态可能发生变化时;需要确保安全性时
-
STE达到下面这些条件时,有可能发生死锁:1、具有多个SharedResource参与者;2、线程锁定一个SharedResource时,还没解除锁定就提前去锁定另一个SharedResource;3、获取SharedResource参与者的顺序不固定。
-
性能低落的主要原因:1、获取锁定要花时间;2、线程冲突时必须等待。
-
long与double是非原子的,如果有多线程操作,需要声明成volatile。
Immutable
-
Immutable实例的状态不会改变,因此也不需要保护。
-
final类无法定义子类,声明的方法也无法被覆盖。