我有以下内容:
function NumberFormatter(){
...
function helper(){
...
var tempvar;
...
}
function format(num){
...
helper()
...
}
}
//there is a single instance of FT
var FT = new NumberFormatter()
FT.format(123)
对象的状态没有改变。
在多线程上下文中,如果几乎同时从两个不同的地方调用 format()
,此代码是否会失败?
是否有一种简单的方法来锁定对象,还是持有 1000 个实例更好?
答案:(总结所有张贴在这里...)
不会,代码不会失败(因为JavaScript中没有真正的多线程)
无法锁定对象,您也不需要
你可以有一个实例。无需创建 1000 个实例
对于那些不相信的人,proofcode:
<script type='text/javascript'>
function get_random_color() {
var letters = '0123456789ABCDEF'.split('');
var color = '#';
for (var i = 0; i < 6; i++ ) {
color += letters[Math.round(Math.random() * 15)];
}
return color;
}
setInterval('document.getElementById("a").style.backgroundColor=get_random_color()', 10)
//*** setInterval() stops when heavy calculations are done ***//
document.getElementById("b").onclick = function(){
for(var i=0;i<10000000; i++){
Math.atan2(Math.round(1000))
}
}
</script>
最佳答案
两件事。首先,您唯一需要担心并发问题的时候是在处理外部资源或更改对象状态时。因为调用 formatNum
不会改变 NumberFormatter
的状态,所以完全没有什么可担心的。
其次,javascript doesn't do multi threading .所以这是一个有争议的问题。
关于JavaScript:异步但不是多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5664011/