调用Javascript方法是线程安全的还是同步的?

时间:2011-10-23 19:04:30

标签: javascript null thread-safety synchronized

我还是Javascript的新手。我正在开发一个简单的页面,我单击一个按钮来获取servlet上的值并显示它。它运作良好,除非我在按钮上点击疯狂。有时,显示的结果为空。

我想知道这是否是由同时调用相同的以下函数引起的:

function loadXMLDoc2(retr) {
    var xmlhttp;
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            $("#" + retr).button('option', 'label', xmlhttp.responseText);
            // document.getElementById(retr).innerHTML=xmlhttp.responseText;
        }
    }
    var param = "cmd=" + encodeURIComponent(retr);
    document.getElementById("TOP_LEFT").innerHTML = param;
    xmlhttp.open("GET","/WebFront/Asynclet?" + param,true);
    xmlhttp.send(null);
}

Javascript线程安全吗?如果没有,我如何同步或隔离对此方法的调用?

2 个答案:

答案 0 :(得分:36)

除了HTML5网络工作者(受到严格控制)之外,Javascript是单线程的,因此线程安全没有问题。一个执行线程将在下一个执行之前完成。

像ajax响应这样的事情会通过一个事件队列,只有在任何其他执行线程完成时才会执行。

有关详细信息,请参阅Do I need to be concerned with race conditions with asynchronous Javascript?

有关ajax响应回调的具体讨论,请参阅How does JavaScript handle AJAX responses in the background?

答案 1 :(得分:4)

在浏览器的上下文中,JavaScript本质上是单线程的。 (有一些较新的浏览器功能提供了一种线程模型,但线程交互非常有限,无法直接共享数据。)

相关问题