Java高并发至Synchronized

Synchronized的作用

  能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。

并发编程的地位:

  关键字,被java原生支持,实现互斥的基本手段、是研究高并发的基础。

不使用并发手段会有什么样的后果:

  例如i++的操作,如果不使用同步的话会线程不安全。

Synchronized的两种使用方式:

  对象锁(方法锁、同步代码块锁),类锁(被Synchronized修饰的静态方法、锁为Class对象)。

多线程的三个核心思想:

  1、一把锁只能同时被一个线程占有,那些拿到锁的线程必须等待。

  2、每个实例都对应有自己的一把锁,不同的实例之间互不影响(例外:锁对象是*.class或被synchronized修饰的static方法时所有对象公用一把锁)

  3、无论方法是异常抛抛错还是正常结束,JVM都会自己释放锁。

常见的面试问题:

  1、两个线程同时访问一个对象的同步方法会怎么样? -- 锁对象的this,所以两个线程串行

  2、两个线程访问两个两个对象的同步方法会怎么样? --锁对象不同,所以和普通方法没有区别

  3、如果两个线程访问的是被Synchronized修饰静态方法呢?--锁对象是类锁,所以还是串行

  4、同时访问同步和非同步方法呢? 线程并行,Synchronized只作用与一个方法中,内部调了非静态方法(没有被修饰的)是不会有任何同步效果的

  5、访问同一对象不同的普通同步方法呢?  --线程并行

  6、同时访问一个静态的和非静态的同步方法呢?--线程并行

  7、方法抛出后会释放锁码?--会

原文地址:https://www.cnblogs.com/niuyg928/p/12888804.html