gpt4 book ai didi

java - 如何使我的代码线程安全?

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:54 24 4
gpt4 key购买 nike

给定一个具有静态方法的 Factory 类来为 SomeModel 类创建实例,它将在多线程环境中运行。这个Factory有三个方法:

  1. 开始
  2. 停止
  3. 创建一些模型

和一个 state 字段,位于:

  1. 已关闭
  2. 开始
  3. 开始失败
  4. 开始
  5. 关闭
  6. 关闭_失败

这是 Factory 类的当前设计:

public class Factory {

enum State{
shutted, starting, starting_failed, started, shutting, shutting_failed
}

State state;

public static void start(){
// can only be invoked when state=shutted
}

public static void stop(){
// can only be invoked when state=started
}

public static void restart(){
stop();
start();
}

public static SomeModel create(){
// can only be invoked when state=started
}
}

我的要求是:create方法只能在state==started时调用,start方法只能在state==shutted时调用|| state == shutdown_failed,且 stop 方法只能在 state==started|| 时调用状态==开始失败

我知道这与线程同步问题有关,但我对我的线程知识没有信心。请帮助我。

最佳答案

我建议您根本不要使用静态方法。

相反,创建 Factory 类的对象并让所有方法同步

public enum State{
shutted, starting, starting_failed, started, shutting, shutting_failed;
}

public class Factory {
private State state;

public synchronized void start(){
if(state != State.shutted) {
throw new RuntimeException("Can only be invoked when state=shutted");
}
// do task
}

public synchronized void stop(){
if(state != State.started) {
throw new RuntimeException("Can only be invoked when state=started");
}
// do task
}

public synchronized void restart(){
stop();
start();
}
}

希望这有帮助。

关于java - 如何使我的代码线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28085584/

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