本文主要参考Java面试进阶指南(https://xiaozhuanlan.com/topic/2419358670),Synchronized关键字实现原理(https://blog.csdn.net/weixin_36759405/article/details/83034386)
不足之处,欢迎大家批评指正!
本文主要内容:
- synchronized关键字,使用方式,实现原理,与ReentrantLock的异同
- volatile关键字,内存可见性问题,和synchronized的区别
- 线程池,创建方式,Runnable和Callable的异同,submit和execute方法的区别
一、synchronized关键字
1.说说对synchronized关键字的了解
synchronized关键字可以解决多个线程之间访问资源的同步性问题,可以保证它修饰的方法或代码块在任意时刻只能有一个线程执行。
2.如何使用synchronized关键字
(1).修饰代码块:即同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象。
(2).修饰普通方法:即同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象。
(3).修饰静态方法:其作用的范围是整个静态方法,作用的对象是这个类的所有对象。
锁的类型:
区别:
使用示例:
/**
* 对象锁
*/
public class Test{
// 对象锁:形式1(方法锁)
public synchronized void Method1(){
System.out.println("我是对象锁也是方法锁");
try{
Thread.sleep(500);
} catch