gpt4 book ai didi

java - 需要保证只有1个线程访问资源

转载 作者:行者123 更新时间:2023-11-29 05:37:47 25 4
gpt4 key购买 nike

我有一个带有 Action 监听器的类(作为 JSF 托管 bean 的一部分)。 Action 监听器中的代码正在创建另一个类的新对象。 A类。这个对象被用来调用这个类的一个函数..

public void invokeActionListener(ActionEvent act)
{
MyClass myclass=new MyClass();
myclass.invokeRequest();
}

invokeRequest函数处理完一些数据后依次调用另一个函数B,函数B调用另一个函数C,C调用D,然后流程结束..

我想确保在 D 完成之前只调用一次 invokeRequest。

我将同步放在函数 invokeRequest() 上,但同步不起作用。即使 1 个线程仍在工作,不同的线程也能够调用此函数。

Class MyClass
{
public synchronized void invokeRequest()
{
invokeRequestB();
}

public void invokeRequestB()
{
invoke RequestC();
}

public void invokeRequestC()
{
invoke RequestD();
}

public void RequestD()
{
//Complete processing and end the flow.
}

请指导......

最佳答案

同步方法使用它们各自的对象进行锁定。如果您需要防止在不同 对象中进行同步调用,您仍然需要使用相同的对象进行同步。一种方法是使用静态字段进行同步:

Class MyClass {
private static final Object lock = new Object();

public void invokeRequest() {
synchronized (lock) {
invokeRequestB();
}
}
...
}

或者你可以使用MyClass.class作为监控对象;使用您认为更具可读性的任何内容。

关于java - 需要保证只有1个线程访问资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18829467/

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