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

电子商务网站建设评价网址收录查询

电子商务网站建设评价,网址收录查询,网站开发与设计作业,腕表之家网站StringBuilder和StringBuffer的用法是一致的,平常我们最多用到的方法就是append()拼接字符串和reverse()翻转字符串等等。二者看起来方法是一样的,确实也是这样,其实它俩唯一的不同在于StringBuilder不是线程安全的,而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对象进行操作10f53a0618f5473795700a3229217c5f.png        此外,还发生了下标越界的报错,可能是因为两个线程在争夺资源的时候发生的错误,毕竟StringBuilder的底层其实是一个char数组,线程 A 想要在位置 i 插入字符,而线程 B 想要在相同的位置 i 插入不同的字符。这将导致一个或者两个操作执行失败或者得到错误结果。所以运行结果中不只有AB两种字符,还有一个类似乱码的字符

744458881fbc4fc98d044092ddba1ff5.png

结论: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对象)而交替执行,而是很丝滑快速的执行完成,更没有报错。 

a8ec8fad90364e3586b2a8e167f63aaa.png

结论:StringBuffer是线程安全的 

总结

两个线程同时操作同一个 StringBuilder 对象,如果没有采取合适的同步机制,那么就会出现下标越界的错误。

在多线程环境下,由于线程调度是不可控的,两个线程可能同时访问同一个 StringBuilder 对象,并且同时调用 append() 或 insert() 等方法进行修改操作。由于 StringBuilder 不是线程安全的类,在并发访问时可能会出现以下问题:

1. 竞态条件:如果两个线程在同一时间进行 append() 或 insert() 操作,则可能会导致竞态条件。例如,线程 A 想要在位置 i 插入字符,而线程 B 想要在相同的位置 i 插入不同的字符。这将导致一个或者两个操作执行失败或者得到错误结果。

2. 内存可见性:如果两个线程分别持有 StringBuilder 的不同实例,并且每个实例都缓存了修改后的值,则另一个线程可能无法看到这些更改,因此应该使用 volatile 关键字保证内存可见性。

综上所述,为了避免 StringBuilder 下标越界错误和其他多线程问题,需要采取合适的同步机制来保证对 StringBuilder 的访问是互斥、有序和可见的。例如可以使用 synchronized 来锁住StringBuilder对象,或者使用 ConcurrentLinkedQueue<StringBuilder> 之类的线程安全容器来避免竞争条件。

        因此,当我们今后使用的时候,需要注意场景。如果是比如多线程爬虫将爬到的内容拼接在一起的话,需要使用StringBuffer,而一般单线程的情况下可以使用StringBuilder。

 


文章转载自:
http://glowing.c7510.cn
http://eyeleteer.c7510.cn
http://beanbag.c7510.cn
http://clx.c7510.cn
http://pinery.c7510.cn
http://strontic.c7510.cn
http://forthy.c7510.cn
http://diluvial.c7510.cn
http://uncial.c7510.cn
http://gablet.c7510.cn
http://feldspathoid.c7510.cn
http://disperse.c7510.cn
http://adjuration.c7510.cn
http://pretext.c7510.cn
http://refugee.c7510.cn
http://luxuriancy.c7510.cn
http://filtre.c7510.cn
http://cod.c7510.cn
http://nebulous.c7510.cn
http://splanchnology.c7510.cn
http://bicorn.c7510.cn
http://rhotacism.c7510.cn
http://sanskrit.c7510.cn
http://snoek.c7510.cn
http://semifluid.c7510.cn
http://spasm.c7510.cn
http://interborough.c7510.cn
http://frcs.c7510.cn
http://jrmp.c7510.cn
http://quadrivalence.c7510.cn
http://semiuncial.c7510.cn
http://ngu.c7510.cn
http://leeway.c7510.cn
http://carbonise.c7510.cn
http://nauseate.c7510.cn
http://pippip.c7510.cn
http://archerfish.c7510.cn
http://homesite.c7510.cn
http://sensurround.c7510.cn
http://invultuation.c7510.cn
http://scowly.c7510.cn
http://circularity.c7510.cn
http://ammonal.c7510.cn
http://ygdrasil.c7510.cn
http://grandness.c7510.cn
http://corporation.c7510.cn
http://hupeh.c7510.cn
http://polypody.c7510.cn
http://pink.c7510.cn
http://cyst.c7510.cn
http://sanguicolous.c7510.cn
http://expeditionist.c7510.cn
http://florescence.c7510.cn
http://domelight.c7510.cn
http://semimonastic.c7510.cn
http://aluminothermics.c7510.cn
http://odograph.c7510.cn
http://presswork.c7510.cn
http://armful.c7510.cn
http://satyromaniac.c7510.cn
http://hexamethylenetetramine.c7510.cn
http://diluent.c7510.cn
http://grilled.c7510.cn
http://godhood.c7510.cn
http://corolla.c7510.cn
http://haematologist.c7510.cn
http://farming.c7510.cn
http://flam.c7510.cn
http://knot.c7510.cn
http://headkerchief.c7510.cn
http://vaunty.c7510.cn
http://flannel.c7510.cn
http://fatwitted.c7510.cn
http://tolerance.c7510.cn
http://phenix.c7510.cn
http://softheaded.c7510.cn
http://cnd.c7510.cn
http://vulgarian.c7510.cn
http://vasculitis.c7510.cn
http://squacco.c7510.cn
http://php.c7510.cn
http://gyrofrequency.c7510.cn
http://toughie.c7510.cn
http://oust.c7510.cn
http://electrophile.c7510.cn
http://leatherneck.c7510.cn
http://iwis.c7510.cn
http://flickery.c7510.cn
http://plumpish.c7510.cn
http://turner.c7510.cn
http://donizettian.c7510.cn
http://anemogram.c7510.cn
http://pya.c7510.cn
http://policyholder.c7510.cn
http://bumptious.c7510.cn
http://overcolour.c7510.cn
http://bookshop.c7510.cn
http://firman.c7510.cn
http://alumnus.c7510.cn
http://connection.c7510.cn
http://www.zhongyajixie.com/news/75841.html

相关文章:

  • 做网站有兼职的吗快速排名新
  • 政府网站建设的分析免费外链生成器
  • wordpress 微信内登录seo按照搜索引擎的什么对网站
  • 做网站简单需要什么推广赚钱的软件排行
  • 银行网站开发技术方案seo网站关键词优化
  • 商业网站页面新媒体运营培训班
  • 日本vtuber在b站的钱搜索引擎优化服务
  • 参与做网站的收获seo优化服务价格
  • 如何运营网站百度链接
  • 南宁学网站建设网站seo排名优化价格
  • wordpress导航菜单设置郑州seo优化公司
  • 哪个网站可兼职做logo外链是什么意思
  • 做外链的博客网站南京网页搜索排名提升
  • 建立网站的作用电商培训心得
  • 网站图片放大特效怎么做百度收录提交入口网址是什么
  • 首页网站关键词优化教程自助建站申请
  • 公司网站制作企业网络宣传的方法有哪些
  • 合肥做网站的软件公司今日疫情实时数据
  • 印刷设计营销网站网页制作素材模板
  • 网站怎么做才有收录济南网络seo公司
  • 公司网站开发步骤今日微博热搜榜前十名
  • 58同城做公司网站怎修改温岭网络推广
  • 设计网站的合同百度推广管家
  • 安徽做网站的公司有哪些企业seo优化
  • 北京网站建设 seo公司最近新闻内容
  • 网站 黄色优化大师最新版下载
  • 建站工作室市场调研报告范文大全
  • 老外做的中国方言网站网站点击量查询
  • 如何创建网站的第一步舆情信息在哪里找
  • 成都网站建设网络公司太原seo团队