auto commit

This commit is contained in:
CyC2018 2018-03-10 20:23:29 +08:00
parent 1bbc3cd9f5
commit 3998d45016

View File

@ -647,22 +647,20 @@ Thread printThread = new Thread(new Runnable() {
相对的线程安全就是我们通常意义上所讲的线程安全,它需要保证对这个对象单独的操作是线程安全的,我们在调用的时候不需要做额外的保障措施,但是对于一些特定顺序的连续调用,就可能需要在调用端使用额外的同步手段来保证调用的正确性。
在Java语言中大部分的线程安全类都属于这种类型例如Vector、HashTable、Collections的synchronizedCollection() 方法包装的集合等。
Java 语言中,大部分的线程安全类都属于这种类型,例如 Vector、HashTable、Collections synchronizedCollection() 方法包装的集合等。
### 1.4 线程兼容
线程兼容是指对象本身并不是线程安全的但是可以通过在调用端正确地使用同步手段来保证对象在并发环境中可以安全地使用我们平常说一个类不是线程安全的绝大多数时候指的是这一种情况。Java API中大部分的类都是属于线程兼容的如与前面的Vector和HashTable相对应的集合类ArrayList和HashMap等。
线程兼容是指对象本身并不是线程安全的但是可以通过在调用端正确地使用同步手段来保证对象在并发环境中可以安全地使用我们平常说一个类不是线程安全的绝大多数时候指的是这一种情况。Java API 中大部分的类都是属于线程兼容的,如与前面的 Vector HashTable 相对应的集合类 ArrayList HashMap 等。
### 1.5 线程对立
线程对立是指无论调用端是否采取了同步措施都无法在多线程环境中并发使用的代码。由于Java语言天生就具备多线程特性线程对立这种排斥多线程的代码是很少出现的而且通常都是有害的应当尽量避免。
线程对立是指无论调用端是否采取了同步措施,都无法在多线程环境中并发使用的代码。由于 Java 语言天生就具备多线程特性,线程对立这种排斥多线程的代码是很少出现的,而且通常都是有害的,应当尽量避免。
一个线程对立的例子是Thread类的suspend()和resume()方法如果有两个线程同时持有一个线程对象一个尝试去中断线程另一个尝试去恢复线程如果并发进行的话无论调用时是否进行了同步目标线程都是存在死锁风险的如果suspend()中断的线程就是即将要执行resume()的那个线程那就肯定要产生死锁了。也正是由于这个原因suspend()和resume()方法已经被JDK声明废弃@Deprecated了。常见的线程对立的操作还有System.setIn()、Sytem.setOut()和System.runFinalizersOnExit()等。
一个线程对立的例子是 Thread 类的 suspend() resume() 方法,如果有两个线程同时持有一个线程对象,一个尝试去中断线程,另一个尝试去恢复线程,如果并发进行的话,无论调用时是否进行了同步,目标线程都是存在死锁风险的,如果 suspend() 中断的线程就是即将要执行 resume() 的那个线程那就肯定要产生死锁了。也正是由于这个原因suspend() resume() 方法已经被 JDK 声明废弃(@Deprecated了。常见的线程对立的操作还有 System.setIn()、Sytem.setOut() System.runFinalizersOnExit() 等。
## 2. 线程安全的实现方法
# 多线程开发良好的实践
- 给线程命名;