作为免责声明,我在这里不够深入,我的朋友实际上正面临着这个问题,而且我对正在发生的事情感到好奇。
我来自更多javascript / node.js背景,据我了解
let a = 10
setTimeout(() => (a = 20))
a = 0;
a = 20将始终执行最后一个,换句话说,在a = 0
之后我的朋友有一段类似的代码,但是是为Android编写的
// handler is created somewhere in this same thread
a = 10;
handler.sendMessage(20);
a = 0;
他声称,处理程序的handleMessage方法有一个对a的引用,并在队列就绪时将a设置为20.
问题是在某个时间之后,在一个不同的线程中,当他检查一个值时,大部分时间它是20但很少是0。他也非常确定handleMessage已经被执行了。这是怎么发生的?
不能保证handleMessage像javascript中的示例一样最后运行吗?如果不是我如何优雅地解决这个问题?
对不起我可怕的伪代码,但我真的很好奇,如果有人能指出我正确的方向,我会非常感激。