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

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

最佳答案

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

ajax 响应之类的事情通过事件队列,并且仅在任何其他执行线程完成时执行。

参见 Do I need to be concerned with race conditions with asynchronous Javascript?了解更多信息。

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

关于javascript - 对 Javascript 方法的调用是线程安全的还是同步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7868434/

相关文章:

javascript - 如何自定义 Google Visualization Geochart 工具提示

swift - 为什么在 Swift 中将 nil 分配给可选变量是正确的?

具有空键的 Java 不区分大小写的映射

c++ - 取消引用 NULL 指针是否被视为未指定或未定义的行为?

c - 用于 Oracle 数据库访问的线程安全全局 sqlca 结构

javascript - 将数据上传到数据库而不停止站点的加载

javascript - 服务器有异步工作时具有返回值的 Meteor.call()

java - 父子线程同步(子线程 "on monitor")

java - 整数实例变量上的线程同步

javascript - 使用 Jquery 切换时完全替换类