JAVA并发入门(一)

Java并发入门(一)

线程安全

共享:一个变量可以被多个线程访问

什么情况是线程安全的

当多个线程访问同一个类时,如果不用考虑这些线程在运行时环境下的电镀和交替执行情况,并且不需要额外地进行同步以及在调用代码时不必作其他的协调,这个类的行为仍然是正确的,那么这种类就是线程安全的。

多线程安全问题

在没有同步的情况下,一个变量可以被多个线程同时访问,这时就会出现线程安全问题。
为了避免这种情况的出现一般有3种方法:
1,不要跨线程共享变量。
2,使状态变量为不可变的。(final)
3,任何时候访问状态变量的时候都使用同步手段。

原子性

一个操作可以作为一个单独的,不可分割的操作去执行。

竞争条件

为了获取期望的结果,需要依赖相关的事件(进程等待I/O条件满足),而当使用潜在的过期的观察值来作决策或执行计算时,这种竞争条件被称作检测再运行(check-then-act)。

惰性初始化

惰性初始化的目的是延迟对象的初始化,直到程序真正使用它,同时确保它只初始化一次。

原子操作和复合操作

假设有操作A和B,如果从执行A的线程的角度看,当其他线程执行B时,要么B全部执行完成,要么一点都没有执行,这样A和B护卫原子操作。
将检测再运行和读改写的全部执行过程可以看作是复合操作。

为了保护状态的一致性,要在单一的原子操作中更新相互关联的状态变量。

内部锁

Java提供了强制原子性的内置锁机制:synchronized块。一个synchronized块有两部分构成。锁对象的引用以及这个锁保护的代码块。synchronized方法是对跨越整个方法题的synchronized块的简短描述,synchronized方法的锁就是该方法所在的对象本身。
如果是静态的synchronized方法,锁是Class对象

你可能感兴趣的:(JAVA并发入门(一))