}
}
如:为代码块加锁,锁对象为我们创建的任意一个对象。不要使用非final的成员变量作为同步锁对象,因为非final成员变量可以被重新赋值,导致不同的线程使用不同的对象作为锁,达不到同步锁定的效果。
public class DemoClass{
//注意这里的关键字final非常重要,看说明
private final Object lock = new Object();
public void demoMethod(){
synchronized (lock){
//同步代码块
}
}
}
[]( )2\. 类级别的同步锁
--------------------------------------------------------------------
类级别的锁可以防止多个线程在运行时进入该类所有实例化对象的 "synchronized块中。也就是说如果运行时有100个`DemoClass`的实例,那么每次只有一个线程能够在任何一个实例中执行`demoMethod()`,所有其他实例的所有其他线程都被锁定。
为了保障静态数据线程安全,应该使用类级别的锁定。我们知道static关键字将方法的数据关联到类的级别上,所以在静态方法上使用锁。
静态方法加锁,对该类所有的实例化对象生效
public class DemoClass{
//静态方法加锁,对该类所有的实例化对象生效
public synchronized static void demoMethod(){
}
}
获取 .class类的引用,类级别的锁
public class DemoClass{
public void demoMethod(){
//获取 .class类的引用,类级别的锁,对该类所有的实例化对象生效
synchronized (DemoClass.class){
//同步代码块
}
}
}
使用静态对象的锁,类级别的锁
public class DemoClass{
//静态对象,类级别,注意这里的关键字final非常重要
private final static Object lock = new Object();
public void demoMethod(){
//使用静态对象的锁,类级别锁,对该类所有的实例化对象生效
synchronized (lock){
//同步代码块
}
}
}
[]( )3\. 总结
---------------------------------------------------------------
1. Java中的同步机制保证了两个或多个线程无法同时执行一个需要相同同步锁的方法。
2. "synchronized "关键字只能用于方法和代码块。这些方法或代码块可以是_静态_或_非静态_的。
3. 当一个线程进入`synchronized`方法或代码块时,它就会获得一个锁,当它离开同步方法或代码块时,它就会释放这个锁。如果线程执行过程出现任何错误或异常,锁也会被释放。
4. 使用"synchronized "关键字持有的锁在本质上是可重入的,这意味着如果一个同步方法调用另一个**使用相同锁**的同步方法,那么持有锁的当前线程可以进入该方法而无需再次获得锁。
5. 如果同步块中使用的对象为空,Java synchronized 将抛出NullPointerException
6. 使用`synchronized`同步方法会给你的应用程序带来性能成本。因此,尽量在绝对需要的情况下才使用同步。另外优先考虑使用同步代码块,并且只同步代码的关键部分。
7. 静态同步方法和非静态同步方法有可能同时或并发运行,因为它们使用的是不同的锁。
8. 根据Java语言规范,你不能在构造函数中使用`synchronized`关键字。这是不合法的,会导致编译错误。
9. 不要使用非final的成员变量作为同步锁对象,因为非final成员变量可以被重新赋值,导致不同的线程使用不同的对象作为锁,达不到同步锁定的效果。
10. 不要使用字符串字面量作为锁对象,如:`String a = "1";`,因为它们可能会被应用程序中的其他地方引用,并可能导致死锁。用`new`关键字创建的字符串对象可以安全使用。
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/f8f134b4425751d82e029fd6b01071f0.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/a238384f3cb11fd306d552c9283e4d5f.png)
![img](https://img-blog.csdnimg.cn/img_convert/453da132061e180c754e745b082e4a2c.png)
![img](https://img-blog.csdnimg.cn/img_convert/e0b64e6d7108316d9467aa405e50c793.png)
![img](https://img-blog.csdnimg.cn/img_convert/f6bccd194191848817bd03c53c878450.png)
![img](https://img-blog.csdnimg.cn/img_convert/8db45ede52805a1d33f8900f394c867c.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)**
![img](https://img-blog.csdnimg.cn/img_convert/0e0bc5a665cfb3b8639d29261547a404.jpeg)
# 知其然不知其所以然,大厂常问面试技术如何复习?
**1、热门面试题及答案大全**
面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer
![](https://img-blog.csdnimg.cn/img_convert/161fa409441c6b770c45f69177b4d062.webp?x-oss-process=image/format,png)
**2、多线程、高并发、缓存入门到实战项目pdf书籍**
![](https://img-blog.csdnimg.cn/img_convert/803d335d041b5e2987aaafd91d7caf4a.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/56e124d3830cc282151b2b4938919b20.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/9ff1f80dc1ac6e5b0ddebee488c92a35.webp?x-oss-process=image/format,png)
**3、文中提到面试题答案整理**
![](https://img-blog.csdnimg.cn/img_convert/db52617e0ab7c5ccd928267ed1704227.webp?x-oss-process=image/format,png)
**4、Java核心知识面试宝典**
覆盖了**JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入**
![](https://img-blog.csdnimg.cn/img_convert/eab639e79e017bc7cce1ae1bf53595ea.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/84a54230afac1ad47f2375385b770f3f.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/200cbbd552b53fecf39659285d1bb46a.webp?x-oss-process=image/format,png)
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/969b22e94f1015541f36e754c5b5bf53.jpeg)
(img-m55aD7q3-1712848827960)]
[外链图片转存中...(img-wXMCeeO2-1712848827960)]
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-1uVuEVN5-1712848827960)]