Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对Javascript方法的调用是线程安全的还是同步的?_Javascript_Null_Thread Safety_Synchronized - Fatal编程技术网

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

对Javascript方法的调用是线程安全的还是同步的?,javascript,null,thread-safety,synchronized,Javascript,Null,Thread Safety,Synchronized,我对Javascript还是新手。我正在开发一个简单的页面,在该页面中,我单击一个按钮获取servlet上的值并显示它。它工作得很好,除非我疯狂地点击按钮。有时,显示的结果为空 我想知道这是否是由于同时调用以下同一个函数造成的: function loadXMLDoc2(retr) { var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari

我对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是线程安全的吗?如果没有,我如何同步或隔离对该方法的调用?

除了HTML5 web workers(这些web workers受到非常严格的控制,显然不是您所要求的),浏览器中的Javascript是单线程的,因此常规Javascript编程不存在线程安全问题。一个执行线程将在下一个线程开始之前完成。没有两个Javascript完全同时运行

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

有关更多信息,请参阅


有关ajax响应回调的具体讨论,请参见。

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

我认为大多数浏览器都会尝试阻止竞争条件。我在JavaScript中没有看到任何同步块或类似的东西,因为它的设计非常简单(而且是单线程的)。