- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个SpringBoot Web服务器;在其上的一条路由,用于控制单例实例的状态。通常由多个参与者调用此路由,因此必须进行同步。
路由调用的相应方法是set()
:
@Synchronized
public fun <T> set(t: T) {
val incomingState = State.from(t)
if(incomingState == innerState){
return
}
change(incomingState)
}
@Synchronized
private fun change(newState: State){
this.stateAccessLock.lock()
SystemLog.logResourceLocking("HomeState", isLocked = true)
SystemLog.logHomeEvent("Changing HomeState from '${innerState.name}' to '${newState.name}'")
try {
Home.INSTANCE.EXTENSION.broadcastStateChange(
innerState?.name,
newState.name
)
}
finally {
innerState = newState
Home.save()
stateAccessLock.unlock()
SystemLog.logResourceLocking("HomeState", isLocked = false)
}
}
在使用@Synchronized批注之前,我还尝试过在同一类中使用
ReentrantLock
(如您所见,到目前为止,我忽略了将其删除)。初始化如下:
private var stateAccessLock = ReentrantLock()
@Autowired
fun HomeState(@Qualifier("stateAccessLock") stateAccessLock: ReentrantLock) {
this.stateAccessLock = stateAccessLock
}
现在,
change()
中的第三行和最后一行记录了资源锁定并免费提供的资源。过滤这些事件的日志文件可以给我以下信息:
[2020-10-09T16:07:01.709] LOCK: Resource locked
[2020-10-09T16:07:01.710] LOCK: Resource locked
[2020-10-09T16:07:01.725] LOCK: Resource locked
[2020-10-09T16:07:01.727] LOCK: Resource locked
[2020-10-09T16:07:01.818] LOCK: Resource unlocked
[2020-10-09T16:07:01.828] LOCK: Resource unlocked
[2020-10-09T16:07:01.829] LOCK: Resource unlocked
[2020-10-09T16:07:01.839] LOCK: Resource unlocked
[2020-10-09T16:11:33.499] LOCK: Resource locked
[2020-10-09T16:11:33.523] LOCK: Resource locked
[2020-10-09T16:11:33.525] LOCK: Resource locked
[2020-10-09T16:11:33.692] LOCK: Resource unlocked
[2020-10-09T16:11:33.692] LOCK: Resource unlocked
[2020-10-09T16:11:33.693] LOCK: Resource unlocked
[2020-10-09T16:11:35.881] LOCK: Resource locked
[2020-10-09T16:11:35.959] LOCK: Resource unlocked
显然,我想要这样的东西:
[2020-10-09T16:07:01.709] LOCK: Resource locked
[2020-10-09T16:07:01.710] LOCK: Resource unlocked
[2020-10-09T16:07:01.725] LOCK: Resource locked
[2020-10-09T16:07:01.727] LOCK: Resource unlocked
[2020-10-09T16:07:01.818] LOCK: Resource locked
[2020-10-09T16:07:01.828] LOCK: Resource unlocked
[2020-10-09T16:07:01.829] LOCK: Resource locked
[2020-10-09T16:07:01.839] LOCK: Resource unlocked
我错过了什么?
最佳答案
由于您不从这些方法中返回任何内容,因此我将改为进行线程限制并完全放弃锁定。这还将确保您不会陷入僵局:
private val executor = Executors.newSingleThreadExecutor()
fun <T> set(t: T) {
executor.submit {
val incomingState = State.from(t)
if (incomingState == innerState) {
return
}
change(incomingState)
}
}
由于您具有单线程执行程序,因此可以确保以串行方式处理请求(并且没有锁定)。
关于spring - @Synchronized似乎无法同步访问共享资源以进行对Spring Webserver的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64282162/
我正在尝试根据报表类型提取财务报表信息。 让我更详细地解释一下。 我想从 XBRL 实例中提取损益表、 Assets 负债表和现金流量表——尤其是美国公认会计原则。 对我来说,完美的解决方案是在 XM
本文整理了Java中org.apache.xmlrpc.webserver.WebServer.setupServerSocket()方法的一些代码示例,展示了WebServer.setupServe
本文整理了Java中org.apache.xmlrpc.webserver.WebServer.start()方法的一些代码示例,展示了WebServer.start()的具体用法。这些代码示例主要来
本文整理了Java中org.apache.xmlrpc.webserver.WebServer.createServerSocket()方法的一些代码示例,展示了WebServer.createSer
本文整理了Java中org.apache.xmlrpc.webserver.WebServer.getXmlRpcServer()方法的一些代码示例,展示了WebServer.getXmlRpcSer
本文整理了Java中org.apache.xmlrpc.webserver.WebServer.()方法的一些代码示例,展示了WebServer.()的具体用法。这些代码示例主要来源于Github/S
本文整理了Java中org.apache.xmlrpc.webserver.WebServer.log()方法的一些代码示例,展示了WebServer.log()的具体用法。这些代码示例主要来源于Gi
本文整理了Java中org.apache.xmlrpc.webserver.WebServer.newTask()方法的一些代码示例,展示了WebServer.newTask()的具体用法。这些代码示
本文整理了Java中org.apache.xmlrpc.webserver.WebServer.allowConnection()方法的一些代码示例,展示了WebServer.allowConnect
本文整理了Java中org.apache.xmlrpc.webserver.WebServer.newThreadPool()方法的一些代码示例,展示了WebServer.newThreadPool(
我使用 Airflow 已经有一段时间了,它是由一位同事创建的。最近我遇到了一些错误,这需要我更深入地了解如何修复 Airflow 中的某些问题。 我确实理解这三个进程是什么,但我只是不明白运行它们时
这是一个简单的场景: 用户从 Web 应用程序的网页触发某些操作。这个操作很繁重,需要更多时间。 并且在服务器端操作完成之前,用户触发器用一些不同的参数说相同的操作。所以第二个请求的第二个操作也将开始
是否有一些标准的持续时间,爬虫必须在重复命中同一台服务器之间等待,以免使服务器负担过重。 如果没有,任何关于什么是爬虫的良好等待期的建议都可以被认为是礼貌的。 这个值是否也因服务器而异……如果是这样,
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我的网站目前在一台服务器上仍然可以。但是从其他人的经验来看,大流量可能会突然出现,基本上从一台服务器变成 4 台服务器(1 台负载均衡器、2 台 Web 服务器和 1 台用于数据库)。 在发生大流量后
我重新连接到 Freebsd 服务器 [netcat] 并且/tmp 上有一个文件我想下载它但是不能用我的浏览器浏览 那有什么方法可以下载吗?因为我无权访问其他文件夹。只是/tmp 最佳答案 您可以使
我可以知道应用程序服务器和 Web 服务器之间的区别吗?请列出每个例子。 最佳答案 一个'网络服务器 ' 通常是使用 http 提供内容的任何服务器程序。 (或 https )协议(protocol)
我是一名 .NET 开发人员,我已经使用 C# 工作了将近 3.5 年。我想了解 Web 服务器的工作原理,我的意思不是 65,000 英尺的概览。我想了解网络服务器的内部工作原理。 有哪些很好的资源
我的网络服务器不在家里。我在端口80上为其分配了一个地址,例如192.168.1.123。 我了解这正在我的本地网络上运行。如果我转到网络上的另一台计算机并输入服务器的IP地址,则可以看到该服务器。
应用服务器和网络服务器有什么区别? 最佳答案 大多数时候,这些术语“Web 服务器”和“应用程序服务器”可以互换使用。 以下是 Web 服务器和应用程序服务器功能上的一些主要区别: Web 服务器旨在
我是一名优秀的程序员,十分优秀!