多线程(三)


prtyaa
prtyaa 2023-12-28 17:06:01 65669 赞同 0 反对 0
分类: 资源
多线程(二)中的代码有问题。看起来是把10张票卖完了。但是如果卖1W张票,你去运行代码,可能运行1W次,也没问题,但是可能运行1次就出现问题了。这个问题是什么?就是会出现负的票的张数。例如 卖了-1张,-2张票,例如还剩-1张 还剩0张 还剩-2张票。

这个代码就是有可能存在问题的代码

复现一下问题:

剩下Test类的代码不变。运行结果如下,(一部分截图)会看到15张票重复了,而且出现了还剩-1张,-2张票。100张票卖完就卖完了,怎么可能出现还剩-1,-2张票,肯定是有问题。这个问题就是多线程的安全问题。

这里的问题就是进了代码走到if判断的时候,睡了10毫秒,这时候cpu切到了另外一个线程,也进了if判断,也有可能睡了10毫秒,然后cpu又可能切回了睡的这个线程,开始执行了,执行完之后,打印了,然后cpu又有可能,切回了另一个睡的线程,然后运行代码。这时候打印的tick就是上一个线程执行过后的tick--的基础上再--。如果当前tick = 1 的时候,进了if判断那么tick-- 就是1,然后再一次就是0,再一次就是-1,再一次就是-2。这种情况就是4个线程都进来了,然后依次睡觉。然后依次醒了。

 

一个小问题,Thread.sleep()这个方法是抛出异常的。那我们到底是try-catch处理呢,还是在run上继续throws呢? 能不能抛? 接口编译完也是一个类class。 实现接口相等于父类。父类中的run没有抛异常,子类中的run能抛异常吗? 在异常章节说过了,只能抛父类抛的异常的子类,接口中run方法都没有抛异常,子类的run就不能抛异常。只能try。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL0
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  81
以openkylin为例编译安装内核  76
分享解决宏碁电脑关机时自动重启的方法  73
统信uosboot区分未挂载导致更新备份失败  63
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  63
统信uos安装mysql的实例参考  60
格之格打印机dp3300系列国产系统uos打印机驱动选择  57
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。  51
MySQL国产平替最佳选择---万里数据库(GreatDB)  45
最近下载排行榜
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
以openkylin为例编译安装内核 0
分享解决宏碁电脑关机时自动重启的方法 0
统信uosboot区分未挂载导致更新备份失败 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
统信uos安装mysql的实例参考 0
格之格打印机dp3300系列国产系统uos打印机驱动选择 0
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。 0
MySQL国产平替最佳选择---万里数据库(GreatDB) 0
作者收入月榜
1

prtyaa 收益400.83元

2

zlj141319 收益237.91元

3

哆啦漫漫喵 收益231.52元

4

IT-feng 收益219.92元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.17元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!