南通java培训:理解并发概念
1、1.概念

3、2.2 数据竞争两个或多个线程试图访问同一个非 final 变量并且不加上同步机制,这时会发生数据竞争。没有同步机制可能导致这样的情况,线程执行过程中做出其他线程绣诅收蟮无法看到的更改,因而导致读到修改前的数据。这样反过来可能又会导致无限循环、破坏数据结构或得到错误的计算结果。下面这段代码可能会无限循环,因为读线程可能永远不知道写线程所做的更改:

6、也可以在方法上加 synchronized 关键字

8、竞争的程度对获取 Monitor 的方式有影响

11、请记住,在对象上调用 wait/notify/notifyAll,需要首先获得该对象的锁在检查等待条件的循环中保持等待:这解决了薷蒴塾寒另一个线程在等待开始之前即满足条件时的计时问题。 此外,这样做还可以让你的代码免受可能(也的确会)发生的虚假唤醒在调用 notify/notifyAll 前,要确保满足等待条件。如果不这样做会引发通知,然而没有线程能够避免等待循环
12、4.3 volatile 关键字volatile 解决了可见性问题,让修改成为原子操作。由于存在 happens-before 关系,在接下来读取 volatile 变量前,先对 volatile 变量进行写操作。 从而保证了对该字段的任何读操作都能督读到最近一次修改后的值。

14、AtomicInteger 和 AtomicLong 都提供原子 increment/decrement 操作:

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。