高并发详解---synchronized 并发关键字

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++ ;它看上去只是一个操作,实际上包含了三个动作:

  1. 读取 count。
  2. 将 count 加1。
  3. 将 count的值写入到内存中。假设count为1,线程A进入该方法进行加1操作后count变成2,还未写入内存。线程B进入该方法      对读取的count依旧为1,进行加1后count也是2,因此无论是A还是B写入内存的数值都是2,预期中本来应该为3的数值变成了

 这些信息都是从慕课网上听来的

猜你喜欢

转载自www.cnblogs.com/wygm/p/12201145.html