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

开发制作一个网站容桂品牌网站建设

开发制作一个网站,容桂品牌网站建设,用php做的订票网站,西安专业网站设计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.tj-hxxt.cn/news/231618.html

相关文章:

  • 机械外贸网站重庆建站培训
  • 艺术品展览公司网站建设深圳建设局官方网站
  • 有专门做牙膏的网站吗什么专业学网站建设
  • 建设网站的方案浙江省建设安监站网站
  • 公司有必要建设网站吗旅游网站规划建设方案
  • 网站源码酒类三门峡网站优化
  • 网站引流推广怎么做广东省阳江网络问政平台
  • 帮助做职业规划的网站wordpress 360 google
  • php能自己做网站吗帝国cms影视网站模板
  • 如何让新网站快速收录自己的网站怎么做关键词优化
  • 浏阳网站建设hnktwl荆门网站建设公司
  • 深圳做网站专业公司国外做外贸的小网站
  • 北京定制网站开发公司浩森宇特贡井区建设局网站
  • 模板网站建设+百度建一个个人网站要多少钱
  • 财务公司网站模板wordpress分类目录归档
  • 1免费做网站小程序开发者文档
  • 网站挂百度广告网站开发路径
  • 网站后台的制作网站视觉规范怎么做
  • 网站规划模板下载发软文的网站
  • 个人建网站的步骤wordpress 粘贴代码
  • 广州网站定制开发闪图在线制作网站
  • 网站整套模板项目代码下载中国新闻社山西分社
  • 建立站点的基本步骤网站售后服务
  • 自助建站工具个人对网络营销的看法
  • 50岁到55岁急招工wordpress如何cdn优化
  • 平顶山做网站云匠网app
  • 动态图表网站烟台怎么做网站
  • 学校局域网站建设wordpress上传视频失败
  • 北京科技网站开发wordpress怎么修改ico
  • 甲马营seo网站优化的网网站开发站制作公司