常州模板建站定制网站,广告公司简历模板,服务态度 专业的网站建设,网站建设策划方前置知识了解Java基本语法了解多线程基本知识知识介绍Synchronized简介#xff1a;作用、地位、不控制并发的后果两种用法#xff1a;对象锁和类锁多线程访问同步方法的7种情况#xff1a;是否是static、Synchronized方法等Synchronized的性质#xff1a;可重入、不可中断原…前置知识了解Java基本语法了解多线程基本知识知识介绍Synchronized简介作用、地位、不控制并发的后果两种用法对象锁和类锁多线程访问同步方法的7种情况是否是static、Synchronized方法等Synchronized的性质可重入、不可中断原理加解锁原理、可重入原理、可见性原理Synchronized的缺陷效率低、不够灵活、无法预判是否成功获取锁常见问题如何选择Lock或Synchronized等如何提高性能、JVM如何解决那个线程获取锁等Synchronized简介作用官方解释同步方法支持一种简单的策略来防止线程干扰和内存一致性错误如果一个对象对多个线程可见则对该对象变量的所有读取或写入都是通过同步方法完成的。通俗易懂的解释能够保证在同一时刻最多只有一个线程执行该段代码以达到保证并发安全的效果。地位Synchronized是Java的关键字被Java语言原生支持代码演示不使用并发手段的后果演示代码实战两个线程同时a最后结果会比预计的少原因count它看上去只是一个操作实际上包含了三个动作读取count将count加1将count的值写入到内存中最基本的互斥同步手段并发编程中的元老级角色是并发编程的必学内容Synchronized的两个用法对象锁包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(自己指定锁对象)代码块形式手动指定锁对象方法锁形式synchronized修饰普通方法锁对象默认为this类锁概念(重要)Java类可能有很多个对象但只有1个Class对象本质所以所谓的类锁不过是Class对象的锁而已用法和效果类锁只能在同一时刻被一个对象拥有形式1synchronized加载static方法上形式2synchronized(*.class)代码块消失的请求解决方案不使用并发手段会有什么后果如何解决解决问题两个线程同时a最后结果会比预计的少原因count它看上去知识一个操作实际上包含了三个动作读取count将count1将count的值写入到内存中方法一方法二方法三七种常见情况之123多线程访问同步方法的7种情况两个线程同时访问一个对象的同步方法两个线程访问的是两个对象的同步方法两个线程访问的是synchronized的静态方法同时访问同步方法与非同步方法访问同一个对象的不同的普通同步方法同时访问静态synchronized和非静态synchronized方法方法抛异常后会释放锁情况一情况二情况三情况四情况五情况六情况七7种情况总结3点核心思想一把锁只能同时被一个线程获取没有拿到锁的线程必须等待(对应第1、5种情况)每个实例都对应有自己的一把锁不同实例之间互不影响例外锁对象锁是*.class以及Synchronized修饰的是static方法的时候所有对象共用同一把锁(对应第2、3、4、6种情况)无论是方法正常执行完毕或者方法抛出异常都会释放锁(对应第7种情况)Synchronized缺陷效率低锁的释放情况少、试图获得锁时不能设定超时、不能中断一个正在试图获得锁的线程不够灵活(读写锁更灵活)加锁和释放的时机单一每个锁仅有单一的条件(某个对象)可能是不够的无法知道是否成功获取到锁常见面试问题1、使用注意点锁对象不能为空、作用域不宜过大、避免死锁2、如何选择Lock和Synchronized关键字3、多线程访问同步方法的各种具体情况