java随笔

  1. 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,那也是安全的,放心使用

  2. synchronized和Lock的区别是什么?

区别:

1、lock是一个接口,而synchronized是java的一个关键字。

2、synchronized在发生异常时会自动释放占有的锁,因此不会出现死锁;而lock发生异常时,不会主动释放占有的锁,必须手动来释放锁,可能引起死锁的发生。

posted @   那个商同学  阅读(41)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示