第二章Synchronized简介

2020-07-05  本文已影响0人  西西_20f6

Synchronized作用:
如果一个对象对多个线程可见,则对该对象变量的所有读取和写入都是通过同步方法来完成的。 为了避免线程干扰和内存一致性错误。

Synchronized能够保证同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的目的。该段代码会以原子的方式执行。

Synchronized在高并发地位:
1,Synchronized是java关键字,被java语言原生支持,
2,是最基本的互斥同步手段
3,是并发编程中的元老级角色,是并发编程的必学内容

不控制并发的后果:
实战:两个线程同时a++,最后结果比预计的少。
这是因为a++,实际上包含了三个操作,它不是一个原子操作
(1)读取a
(2)将a+1
(3)将a的值写回内存
在多线程的情况下,这三步任何一步的执行都有可能被打断。
假设t1读取到a=9,然后执行a+1=10,还没来得及写到内存中,被t2线程打断了, t2也读取了a=9(因为t1还没来得及写入10,所以t2看不到a的变化),接着t2执行了a+1=10,然后t1将a=10写入,t2也将a=10写入。这我们的预期结果不符,按理来说t1,t2各执行了一次操作,a应该=11。

这就导致了线程不安全的后果。

上一篇下一篇

猜你喜欢

热点阅读