Java并发基础

 

(1)Java中的主要同步机制是关键字synchronized,它提供了一种独占的加锁方式,但“同步”这个术语还包括volatile类型的变量,显式锁以及原子变量。安全

(2)线程安全性:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。线程

(3)要避免竞态条件问题,就必须在某个线程修改该变量时,经过某种方式防止其余线程使用这个变量,从而确保其余线程只能在修改操做完成以前或以后读取和修改状态,而不是在修改状态的过程当中。对象

(4)若是当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误。有三种方式能够修复这个问题:blog

· 不在线程之间共享该状态变量。同步

· 将状态变量修改成不可变的变量。变量

· 在访问状态变量时使用同步。引用

(5)Java提供了一种内置的锁机制来支持原子性:同步代码块。请求

同步代码块包括两部分:一个做为这个锁的对象引用,一个做为由这个锁保护的代码块。以关键字synchronized来修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。程序

synchronized(lock){方法

//访问或修改由锁保护的共享状态

}

每一个Java对象均可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块以前会自动得到锁,而且在退出同步代码块时会自动释放锁,而不管是经过正常的控制路径退出,仍是经过从代码块中抛出异常退出。得到内置锁的惟一途径就是进入由这个锁保护的同步代码块或方法。

(5)Java的内置锁至关于一种互斥体,意味着最多只有一个线程能持有这种锁。

(6)因为每次只能有一个线程执行内置锁保护的代码块,所以由这个锁保护的同步代码块会以原子方式执行,多个线程在执行该代码块时也不会相互干扰。

(7)当某个线程请求一个由其余线程持有的锁时,发出请求的线程就会阻塞。然而因为内置锁是可重入的,所以若是某个线程试图得到一个已经由他本身持有的锁,那这个请求就会成功。

(8)

相关文章
相关标签/搜索