10个线程同时执行i++操作1000次,如何保证结果是1w
先看代码:
private static int s=0;public static void main(String[] args) throws InterruptedException {for (int j=0;j<10;j++){Thread thread = new Thread(()->{for (int k=0;k<1000;k++){s++;}},"thread-"+j);thread.start();}Thread.sleep(3000);System.out.println(s);}
众所周知,这个程序输出结果肯定是小于等于1w的,那有几种方法可以使这个结果一定等于1w呢?
法一:使用join操作
只需要在 thread.start() 后面加上 thread.join(); 即可
private static int s=0;public static void main(String[] args) throws InterruptedException {for (int j=0;j<100;j++){Thread thread = new Thread(()->{for (int k=0;k<1000;k++){s++;}},"thread-"+j);thread.start();// join可以阻塞主线程,所以必须等待该线程执行结束后才开启下一个线程thread.join();}System.out.println(s);}
法二:使用原子类AtomicInteger
private static AtomicInteger s = new AtomicInteger(0);public static void main(String[] args) throws InterruptedException {for (int j=0;j<100;j++){Thread thread = new Thread(()->{for (int k=0;k<1000;k++){// getAndIncrement方法相当于 s++,incrementAndGet相当于 ++ss.getAndIncrement();}},"thread-"+j);thread.start();}//主线程睡一会等待其他线程执行结束Thread.sleep(3000);System.out.println(s);}
持续更新中,欢迎留言~~~
10个线程同时执行i++操作1000次,如何保证结果是1w相关推荐
- halcon图片上传到mysql_C# 10个线程并发执行Halcon图像算法 报“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”...
如题,这个问题本人已经纠结了快三个工作日了.本人不同WinFrom程序一起动就会开启10个线程,并发对10张图片进行算法处理,问题是只要程序一起动就会报"尝试读取或写入受保护的内存.这通常指 ...
- 对于线程安全的集合类(例如Vector)的任何操作是不是都能保证线程安全
转载自 对于线程安全的集合类(例如Vector)的任何操作是不是都能保证线程安全 之前在公众号中问了这个问题:对于线程安全的集合类(例如Vector)的任何操作是不是都能保证线程安全? 三天之内收到1 ...
- java:编写10个线程,第一个线程从1加到10,第二个线程从11加到20……第十个线程从91加到100, 最后再,10个线程结果相加
在生活中,人体可以同时进行各项生命活动.例如,人体可以同时进行呼吸.血液循环等等- 当我们在编写程序时,这些行为我们可以抽象为并发,而将并发完成的每一件事称为线程. 线程创建的两种传统方式 方式一:继 ...
- ThreadPoolExecutor(五)——线程池关闭相关操作
补充了和Thread的interrupt操作相关的知识,回头再来看ThreadPoolExecutor中interrupt,关闭线程池等相关操作. 1.shutdown /*** Initiates ...
- DevelopTraining(20)---执行网络操作
官方链接:https://developer.android.com/training/basics/network-ops/index.html 这节课讲解了网络连接参与一些基础的任务,监测网络连接 ...
- Java线程池ThreadPoolExecutor回收线程时执行资源回收操作
背景 一般来说,由于Java有垃圾回收机制存在,只需要确保不要写出内存泄露的代码,不需要手动回收资源.然而有时候Java程序会依赖一些外部的资源,如在线程池中调用浏览器爬取网页时,为了避免频繁打开浏览 ...
- 在Android中使用Handler和Thread线程执行后台操作
在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...
- Android中使用Handler和异步任务(AsyncTack)来为UI线程执行费时操作
出于性能优化的考虑,Android的UI线程不是线程安全的.这致使我们不能在Android的UI线程中执行一些费时的操作,如下载.刷新等.Android中只允许UI线程对Activity中的UI组件进 ...
- //多线程龟兔赛跑问题,乌龟和兔子比赛跑200米的距离,//名叫兔子的线程每执行一次兔子就向前跑5米,每跑50米休息10毫秒,//名叫乌龟的线程每执行一次乌龟就向前跑1米,乌龟会一直跑不休息/
//多线程龟兔赛跑问题,乌龟和兔子比赛跑200米的距离, //名叫兔子的线程每执行一次兔子就向前跑5米,每跑50米休息10毫秒, //名叫乌龟的线程每执行一次乌龟就向前跑1米,乌龟会一直跑不休息 // ...
- Android ThreadUtil 线程公共类,判断是否在主线程/ 子线程执行 相关操作
前言:通常,我们写的公共的模块给别人用,但是这个模块又必须在特定的线程中执行. 比如,一个加载网络图片的的方法,需要在子线程中执行. /** * 加载网络图片 */ private void load ...
最新文章
- 网站性能调优开发工具: Lighthouse, Puppeteer 以及进阶部分丨 Google 开发者大会 2018...
- c语言 python-C语言、Java语言和python语言的区别在哪里
- SQL语句对象化,先看示例代码.
- 吴恩达《序列模型》精炼笔记(2)-- NLP和Word Embeddings
- java实现人脸识别源码【含测试效果图】——Dao层(BaseDao)
- IntelliJ IDEA 2020.1 瞬间定位文件夹、文件
- 通过 Kubeadm联网部署K8S
- js识别用户设备是移动端手机时跳转到手机网站
- 【工具】JAVA 在单元读取文件并比较
- apache url 包含特殊字符 404
- hadoop与hive
- Java窗口之文本框、按钮、菜单
- 个人免签支付接口二维码扫码支付
- Leetcode之Teemo Attacking 问题
- PAT 乙级1068 万绿丛中一点红(20 分)
- 新生代公链再攻「不可能三角」
- 创建标准化工程目录脚本
- IDEA 学生注册成功并使用一段时间,还要激活,并且提示No suitable licenses associated with account
- 七大室内定位技术PK(转自3Snews)
- 智安网络丨第一次听人把云计算讲这么明白!