zoukankan      html  css  js  c++  java
  • JAVA-初步认识-常用对象API(StringBuilder类)

    一.

    兼容是什么意思?就是说两者是一回事,也就是说,用StringBuffer行,用StringBuilder也行,功能一模一样,用法一模一样。

    区别在于StringBuilder是1.5版本才在,而StringBuffer是1.0版本就存在了。

    为什么1.5版本推出一个和1.0版本中StringBuffer类似的方法呢?因为StringBuilder不保证同步,而StringBuffer保证安全。

    StringBuffer怎么保证安全的?这点很重要,和日后要学习的容器相关。

    为什么速度会快?不需要判断锁,锁在哪儿?

    StringBuffer来的时候,作为一个容器,它需要考虑,万一被多线程所操作的时候,不安全怎么办呢?它就做了一个同步的动作。

    它是怎么实现同步的呢?思考,到底同步什么最重要?

    我创造一个StringBuffer对象,一个线程在往里面添加,一个线程在删除,这个时候就会出现安全隐患。因此,要保证删的时候,不能添;添的时候,不能删。这锁怎么加?这就意味着,添和删要进行同步,

    这样一来,就同步了,只要是用的同一个锁就可以了。

    一般它们不这么操作,而是在内部用同步代码块解决。

    StringBuffer在1.0的时候,确实完成同步了,安全了。也是容器,速度也慢。调用一次添加方法,要进行判断;调用一次删除方法,也要进行判断,如果是单线程的话,就废了,调用一次,判断一次;调用一次,判断一次;这就很慢了。但是那个时候,我们更多的是考虑的安全,后期出现StringBuilder就是为了解决单线程效率低的问题。

    单线程使用builder,多线程使用buffer。builder的出现就是为了提高缓冲区的效率。

    简化书写通常会有局限性,效率也是,而安全性提高带来都是书写的麻烦。

  • 相关阅读:
    dpdk 连接错误
    strace 跟踪文件
    鲲鹏服务器 centos 升级gcc + 安装qemu
    centos 升级gcc
    undefined reference to `shm_open'
    Golang与C互用
    [ TIME ] Timed out waiting for device dev-ttyS0.device. [DEPEND] Dependency failed for Serial Getty on ttyS0.
    大型 Web 应用插件化架构探索
    网易游戏基于 Flink 的流式 ETL 建设
    基于WASM的无侵入式全链路A/B Test实践
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/8127503.html
Copyright © 2011-2022 走看看