java随笔
-
String与Stringbuffer和StringBuilder
String 跟其他两个类的区别是
String是final类型,每次声明的都是不可变的对象,
所以每次操作都会产生新的String对象,然后将指针指向新的String对象。StringBuffer,StringBuilder都是在原有对象上进行操作
所以,如果需要经常改变字符串内容,则建议采用这两者。
StringBuffer vs StringBuilder
前者是线程安全的,后者是线程不安全的。
线程不安全性能更高,所以在开发中,优先采用StringBuilder.
StringBuilder > StringBuffer > String什么是线程安全?
当多个对访问一个类,对象,或者方法时,数据是始终都能正确表现,那么这个就称为线程安全
StringBuffer 为什么安全?
因为在Stringbuffer内部类中,每一个方法都是synchronized修饰的.
那么什么是synchronized?
Synchronized(同步方法/代码块): 可以在任意类及方法上面加锁,而加锁的这段代码称为“互斥区”或者“临界区”。
Java平台中,因为有内置锁的机制,每个对象都有锁的功能。Java虚拟机会为每个对象维护两个“池”.
对于任意的对象objectX,objectX的Entry Set用于存储等待获取objectX这个锁的所有线程,也就是传说中的锁池。
objectX的Wait Set用于存储执行了objectX.wait()/wait(long)的线程,也就是等待池。
一个线程想要执行synchronized修饰的方法里的代码:
1、 尝试获得锁
2 、如果拿到锁,执行synchronized代码体内容;拿不到锁,这个线程就会进入“锁池”,不断的尝试获得这把锁,直到拿到为止,而且是多个线程同时去竞争这把锁。
什么时候使用?
单线程性能优先.
多线程、有边界值(买票问题)优先使用StringBuffer
使用?
.append
一个线程访问一个资源,哪怕使用的是stringbuilder,那也是安全的,放心使用
-
synchronized和Lock的区别是什么?
区别:
1、lock是一个接口,而synchronized是java的一个关键字。
2、synchronized在发生异常时会自动释放占有的锁,因此不会出现死锁;而lock发生异常时,不会主动释放占有的锁,必须手动来释放锁,可能引起死锁的发生。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)