Java基础知识总结(02)

1、String、StringBuilder和StringBuffer的区别?

        String:字符串常量

        StringBuilder 字符串变量(线程不安全)

        StringBuffer 字符串变量  (线程安全)

        原因:

           String:定义存储字符数组为 private final char[] value ------> 字符串常量

           StringBuffer 与 StringBuilder:共同继承AbstractStringBuilder类 ,而AbstractStringBuilder类的存储字符数据为 char[] value ,子类定义存储字符串数据的数组为 private char[] value------->字符串变量。

StringBuilder和StringBuffer线程安全问题:StringBuffer类中的方法加入synchronize方法锁。

String为设计为final类:安全性

StringBuilder和StringBuffer扩容和初始化大小:

        初始化数据长度为:16

        扩容:原有长度的两倍+2

2、sleep()方法和wait()方法的区别?

        sleep()方法是属于Thread类,调用该方法让当前线程暂停,让出CPU,但是不释放线程锁。

        wait()方法是属于Object类,调用该方法的线程必须拥有此对象的锁,执行该方法之后,线程阻塞,让出CPU并且释放锁;等待期间不配拥有CPU执行权,必须调用notify/notifyAll方法(notify是随机唤醒)唤醒并不意味着里面就会执行,而还是需要等待分配CPU才会执行。

        相同点:

                一旦执行sleep()方法或者wait()方法,使当前线程进入阻塞状态。

        不同点:

             1、所属类不同,sleep()属于Thread类,wait()属于Object类。

             2、对锁是否释放不同,sleep()不释放锁,wait()释放锁。

             3、方法适用的场景不同,sleep()任何场景都能调用,wait()只能用在同步代码块或者同步方法的监视器中。

             4、线程被唤醒方式不同,调用sleep()方法的线程,被自动唤醒,而调用wait()方法并没有设置线程阻塞时间,该线程必须通过notify()方法/notifyAll()方法唤醒,反之,如果该线程调用wait()方法设定线程阻塞时间,则线程能被自动唤醒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值