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

【Java并发编程六】多线程越界问题

ArrayList()越界错误

import java.util.ArrayList;
public class myTest implements Runnable {static ArrayList<Integer> a = new ArrayList<>(10);public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(new myTest());Thread t2 = new Thread(new myTest());t1.start();t2.start();t1.join();t2.join();System.out.println(a.size());}@Overridepublic void run() {for(int i=0; i<10000; i++) {a.add(i);}}
}

 上面的代码会有三种可能的运行结果:
①越界。因为List的add方法会先检查list是否足够,从而选择扩容,若第一个线程刚刚扩容完毕,还未添加,第二个线程就进行了检查,从而导致list越界。
②正常结果。结果为20000。
③异常结果。这是因为两个线程同时对i的值进行修改。

HashMap

 HashMap也会出现上述情况。

解决措施

 使用synchronized修饰方法。

import java.util.ArrayList;
public class myTest implements Runnable {static ArrayList<Integer> a = new ArrayList<>(10);public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(new myTest());Thread t2 = new Thread(new myTest());t1.start();t2.start();t1.join();t2.join();System.out.println(a.size());}public static synchronized void func() {for(int i=0; i<10000; i++) {a.add(i);}}@Overridepublic void run() {func();}
}
http://www.lryc.cn/news/236035.html

相关文章:

  • 聊聊httpclient的disableConnectionState
  • Tomcat web.xml文件中的mime-mapping
  • 【Java 进阶篇】JQuery 事件绑定:`on` 与 `off` 的奇妙舞曲
  • 模块化Common JS 和 ES Module
  • 基于java web个人财务管理系统
  • soc估计:DESIGN AND DEVELOPMENT OF SoC ESTIMATION MODEL USING MACHINE LEARNING
  • 2、LeetCode之两数相加
  • redis三种集群方式
  • Java --- JVM之垃圾回收相关算法
  • CentOS 7.9 安装 nginx
  • Newman
  • Transformer中WordPiece/BPE等不同编码方式详解以及优缺点
  • Ubuntu20.04安装Beyond Compare 4.4.7
  • 制作含有音频、视频的网页
  • QPair的介绍及用法
  • 掌握未来技术趋势,Python编程引领人工智能时代
  • 【自留地】后端 - PHP - MySQL - Nginx - Python - Java
  • 网页视频下载工具 iTubeGo mac中文版软件特色
  • 深度学习入门(第三天)——卷积神经网络
  • 【Unity小技巧】图片使用的一些常见问题
  • ZJU Beamer学习手册(二)
  • Shaderlab的组成部分SubShader
  • C语言 字符函数汇总,模拟实现各字符函数(炒鸡详细)
  • 微积分在神经网络中的本质
  • CentOS部署Skywalking
  • window上Clion配置C++版本的opencv
  • FPGA时序分析与约束(14)——虚拟路径
  • 【Python】解析CPP类定义代码,获取UML类图信息
  • Docker存储驱动之- overlay2
  • Vue3 shallowRef 和 shallowReactive