gpt4 book ai didi

java - 只有一个线程可以访问代码的某个部分?

转载 作者:行者123 更新时间:2023-12-03 13:00:44 24 4
gpt4 key购买 nike

我有一个项目需要不时登录我的路由器并进行一些更改。在 Eclipse 中,我有一个单独的项目来处理我需要更改的所有内容,并且我在我的主项目的构建路径中拥有它,这是一个多线程项目。我的问题是,有时两个线程试图访问路由器,这把事情搞砸了。有什么我可以做的,只有一个线程可以访问我的代码的特定部分。

这是主多线程应用程序的相关代码

if (totalLogins > 10)
{
IpManager.rebootRouter();
Thread.sleep(4000);
totalLogins = 0;
composedMessagesWithThisIP = 0;
}

在另一个项目中,这就是我所拥有的
public synchronized static void rebootRouter()
{
try
{
//code related to restart modem
}
catch (Exception e)
{

}
}

所以我所做的是使方法同步,但我相信不时有多个线程访问“rebo​​otRouter”方法。这会导致我的主要应用程序出现问题。

使 IpManager.rebootRouter() 仅由一个线程执行的最佳方法和最有效的方法是什么?

问候!

最佳答案

synchronized保证一次只有一个线程可以进入 block ,但是同一个线程可以多次进入 block (所以线程不会对自己死锁),如果一个线程因为另一个线程在那里而被阻塞,那么它可能在第一个线程离开同步块(synchronized block)后立即运行。

首先,我会在例程的入口和导出点记录日志。
我会检查您是否正在进行任何递归,并确保调用确实同时运行。另外,请记住,如果有任何异步工作或回调,同步块(synchronized block)可能会退出。

关于java - 只有一个线程可以访问代码的某个部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11427030/

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