A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天蝎降降温   /  2014-10-25 12:36  /  3264 人查看  /  20 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

既然有人关注的话,我在说说我查的一些资料。在回答线程同步及多线程安全问题时,我除了说了什么是线程的同步外,什么是多线程的安全问题,两者有什么联系。我还说除了我当时的一个疑问:既然对共享数据进行操作,就拿银行转账问题来说,假如现在有3000块,先转500,再转400,当一个线程第一次转500时还没运行完,第二个线程就开始了,因为操作系统时间片轮转算法,时间片到了,此时CPU调用另一个线程执行,那么不管转多少,转几次,里面不还是剩了2100吗?因为钱是存在一个账户中,一个变量引用中。反正就是觉得是也不是那种感觉,有点似懂非懂的感觉。我查到的资料是:同样在银行转账问题中,你可以写一个程序,然后在cmd(就是老师上课的那个黑框框)中运行 javap -c -v命令,反编译查看字节码命令行,然后你会看到将数据更新会账户的操作有6个指令,也就是系统指令,以上任意一个指令出都可能导致线程中断,CPU转而执行另一个线程,而倒数第二个指令恰好是存回账户更新数据,意思就是剩了多少钱更新回账户,假如线程在这个时候被中断,那么第一个线程由于没执行完,他存回的就绝对是2500块,而对面账户可能增加了900块,那还有400的差额哪去了,这就是多线程安全与线程同步的体现,如果这样的话,银行迟早要倒闭。我说完后,老师注视了我几秒钟(我会骗你?),好像顿时觉得我说的这个别人没说过似的,而且解释清楚了问题。我心里顿时有点开心:我的个擦擦,我查的这个终于派上用场了。我此时注视了一些时间,我回答这个小问题好像用了不少时间,虚的那种心态顿时少了不少。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马