当前位置: 首页 > news >正文

容桂品牌网站建设学的网络工程

容桂品牌网站建设,学的网络工程,产品外观设计案例,深圳龙岗建站公司StringBuilder和StringBuffer的用法是一致的#xff0c;平常我们最多用到的方法就是append()拼接字符串和reverse()翻转字符串等等。二者看起来方法是一样的#xff0c;确实也是这样#xff0c;其实它俩唯一的不同在于StringBuilder不是线程安全的#xff0c;而StringBuffe…         StringBuilder和StringBuffer的用法是一致的平常我们最多用到的方法就是append()拼接字符串和reverse()翻转字符串等等。二者看起来方法是一样的确实也是这样其实它俩唯一的不同在于StringBuilder不是线程安全的而StringBuffer则是线程安全的。 证明如下 验证StriingBuilder 我们分别用两个线程对同一StringBuilder对象追加不同的字符查看结果 public static void main(String[] args) throws InterruptedException {StringBuilder builder new StringBuilder();StringBuffer buffer new StringBuffer();Thread t1 new Thread(new Runnable() {Overridepublic void run() {for (int i 0; i 1000; i) {builder.append(A);}}});Thread t2 new Thread(new Runnable() {Overridepublic void run() {for (int i 0; i 1000; i) {builder.append(B);}}});t1.start();t2.start();t1.join();t2.join();System.out.println(builder.toString());} 结果 我们发现线程1追加字符‘a’运行得好好的突然线程2追加字符‘b’也加了进来两个线程轮流对StringBuilder对象进行操作        此外还发生了下标越界的报错可能是因为两个线程在争夺资源的时候发生的错误毕竟StringBuilder的底层其实是一个char数组线程 A 想要在位置 i 插入字符而线程 B 想要在相同的位置 i 插入不同的字符。这将导致一个或者两个操作执行失败或者得到错误结果。所以运行结果中不只有AB两种字符还有一个类似乱码的字符 结论StringBuilder不是线程安全的 验证StringBuffer 验证方法和上面一直我们分别用两个线程对同一StringBuffer对象追加不同的字符查看结果 public static void main(String[] args) throws InterruptedException {StringBuilder builder new StringBuilder();StringBuffer buffer new StringBuffer();Thread t1 new Thread(new Runnable() {Overridepublic void run() {for (int i 0; i 1000; i) {buffer.append(A);}}});Thread t2 new Thread(new Runnable() {Overridepublic void run() {for (int i 0; i 1000; i) {buffer.append(B);}}});t1.start();t2.start();t1.join();t2.join();System.out.println(buffer.toString());} 结果 我们发现尽管是两个线程但是并没有因为抢占公共资源同一个StringBuffer对象而交替执行而是很丝滑快速的执行完成更没有报错。  结论StringBuffer是线程安全的  总结 两个线程同时操作同一个 StringBuilder 对象如果没有采取合适的同步机制那么就会出现下标越界的错误。 在多线程环境下由于线程调度是不可控的两个线程可能同时访问同一个 StringBuilder 对象并且同时调用 append() 或 insert() 等方法进行修改操作。由于 StringBuilder 不是线程安全的类在并发访问时可能会出现以下问题 1. 竞态条件如果两个线程在同一时间进行 append() 或 insert() 操作则可能会导致竞态条件。例如线程 A 想要在位置 i 插入字符而线程 B 想要在相同的位置 i 插入不同的字符。这将导致一个或者两个操作执行失败或者得到错误结果。 2. 内存可见性如果两个线程分别持有 StringBuilder 的不同实例并且每个实例都缓存了修改后的值则另一个线程可能无法看到这些更改因此应该使用 volatile 关键字保证内存可见性。 综上所述为了避免 StringBuilder 下标越界错误和其他多线程问题需要采取合适的同步机制来保证对 StringBuilder 的访问是互斥、有序和可见的。例如可以使用 synchronized 来锁住StringBuilder对象或者使用 ConcurrentLinkedQueueStringBuilder 之类的线程安全容器来避免竞争条件。 因此当我们今后使用的时候需要注意场景。如果是比如多线程爬虫将爬到的内容拼接在一起的话需要使用StringBuffer而一般单线程的情况下可以使用StringBuilder。
http://www.hkea.cn/news/14495528/

相关文章:

  • 甘洛网站建设北京城乡住房建设官方网站
  • 沈阳教做网站做动画视频的网站
  • 长沙网站建设哪里好百度搜索引擎下载免费
  • 中山建站公司电商系统开发公司
  • 河南省城市建设网站怎么做网络游戏
  • 做网站代理商局域网
  • 宣城网站建设电话网站建设经验交流材料
  • 佛山专业网站建设的公司四川绵阳网站建设
  • 试述电子商务网站的建设流程贵阳建站模板搭建
  • 网站备份查询微信网站如何制作软件
  • 网站建设的客户怎么找pc网站优势
  • 企业建设网站管理制度wordpress 七牛上传插件
  • 自助建站好吗耐克电子商务网站建设
  • 外国s网站建设网站为什么要更新
  • 网站联系方式设置要求株洲网站建设哪家好
  • 贵州省建设厅实名认证网站临猗商城网站建设平台
  • 215做网站十字绣网站开发
  • wep购物网站开发模板建设一个网站的具体步骤
  • 吕梁市网站建设公司北京百度推广官网首页
  • 梧州做网站播州区住房城乡建设路的网站
  • 旅游公司网站制作海南省最新消息
  • 网站建设的意义与目的网站怎么做网站地图
  • 北京网站制建设公司wordpress 分类翻页
  • 湖北省建设厅信息网站男鞋 东莞网站建设
  • 遵义网站制作的网站湘潭网站建设 磐石网络实惠
  • 企业网站设计谁家做了的好用自己点电脑做电影网站
  • 德国设计网站大全做简历最好的网站
  • 国外低代码开发平台网站快照优化怎么做
  • 网站开发自学网怎样申请做自己的网站
  • 网站的文件结构20亿做网站