gpt4 book ai didi

java - 从不相关的类调用静态同步方法是否安全?

转载 作者:搜寻专家 更新时间:2023-11-01 03:00:17 24 4
gpt4 key购买 nike

我有一个使用 static synchronized 方法进行 HTTP 调用的类。

我还有一个 ExecutorService

有多个Runnable类调用这个方法。该方法将接受 URL、POST/GET 信息和参数,如果响应不是 200,则返回错误代码,或者返回 Runnable 类进一步处理的 XML 字符串。

如果多个线程放在ExecutorService中后调用这个方法,这样可以吗?会失败吗?

通过 ExecutorService 处理多个 HTTP 调用的理想方式是什么?

最佳答案

任何关于“线程安全”的问题都必须是关于可变共享数据的问题。除非您的线程共享可变数据,否则不存在线程安全问题。

如果任何一个线程的操作都不可能将对象/组置于其他线程可以看到的“不良”状态,则程序中的一个可变对象或一组可变对象是“线程安全的”线程。

保证对象/组线程安全的最简单、最常用的方法是使用互斥(即同步 block 和/或方法)。如果每个修改或读取数据的方法只在同一对象上所有同步的代码块内进行,并且如果增变函数总是确保对象/组在离开任何 synchronized block 之前处于有效状态,那么该对象/组将是“线程安全的”。


你的问题没有提到任何数据。您的问题没有提到数据可能存在的任何可能的“无效”状态。您的问题谈到了一种方法,但没有提到是否有任何其他方法可以访问相同的数据。

如果所讨论的方法是staticsynchronized,那么这将保证没有两个线程能够同时进入该方法,但是如果有任何其他方法访问或修改相同的数据,则不会使数据“线程安全”。

访问数据的所有代码块和/或方法都必须同步,并且它们都必须在同一个锁对象上同步。


实际上,同步每次访问 可能有点矫枉过正。但是,如果不知道线程正在共享什么数据以及它们对数据做了什么,就无法知道这一点。

一切都与数据有关。

关于java - 从不相关的类调用静态同步方法是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36752281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com