Synchronized作用:
官方:同步方法支持一种简单的策略来方式线程干扰和内存一致性错误,如果一个对象对多个线程可见,则对该对象变量所有的读取和写入都是同步方法完成的。
通俗:能够保证同一时刻最多只有一个线程执行改代码,以保证并发安全效果。
Synchronized地位:
关键字,是基本的同步互斥手段,并发编程必学内容。
不用并发的后果:
多线程情况下出现结果跟预期不符,我们称作线程不安全,例如下面结果不是我们想要的20000
public class DisAppearRequest1 implements Runnable{ static int i = 0; static DisAppearRequest1 instance = new DisAppearRequest1(); public static void main(String[] args) throws Exception{ Thread thread1 = new Thread(instance); Thread thread2 = new Thread(instance); thread1.start(); thread2.start(); thread1.join(); thread2.join(); System.out.println(i); } public void run() { for(int j=0;j<10000;j++){ i++; } } }
count++ ;它看上去只是一个操作,实际上包含了三个动作:
- 读取 count。
- 将 count 加1。
- 将 count的值写入到内存中。假设count为1,线程A进入该方法进行加1操作后count变成2,还未写入内存。线程B进入该方法 对读取的count依旧为1,进行加1后count也是2,因此无论是A还是B写入内存的数值都是2,预期中本来应该为3的数值变成了
这些信息都是从慕课网上听来的