5条回答 默认 最新
- ZhihengTao 2017-12-19 05:52关注
首先,两个线程使用的runnable对象是相同的,不考虑寄存器等缓存的因素,可以认为两个线程中看到的i是相同的,都是runnable对象的一个属性。
其次,线程宏观上并行,但微观上不一定,和CPU的核数以及当前CPU的线程负载有关,所以常常有同一进程内线程交替执行的情况。为了保证程序的正确性,对于临界资源常常需要加锁。对于你的测试情况,可能的运行流程之一是:
thread 1 (i=0 -> 20) [wait] -> thread 2 (i = 21-> 100) [destroy] -> thread 1 (i=100) [destroy]
即你所说的“在线程1准备输出20的时候换到了线程2执行,执行完线程2后再执行线程1,因为线程1是执行了输出语句,只是在显示到控制台的路上”如果你想验证线程的切换,建议可以这样试一下:
使用两个属性i,j,两个线程分别写其中一个,然后分别在两个线程中观察两个属性值。即:
thread 1:
i++; print i, j
thread 2:
j++; print i, j本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 c++的教材订购系统的订购模块显示运行不出来
- ¥15 Coze智能助手搭建过程中的问题请教
- ¥15 12864只亮屏 不显示汉字
- ¥20 三极管1000倍放大电路
- ¥15 vscode报错如何解决
- ¥15 前端vue CryptoJS Aes CBC加密后端java解密
- ¥15 python随机森林对两个excel表格读取,shap报错
- ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
- ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
- ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值