栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础知识总结(02)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()方法设定线程阻塞时间,则线程能被自动唤醒。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356073.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号