gpt4 book ai didi

java - java中单个类的线程减少

转载 作者:行者123 更新时间:2023-12-01 11:45:32 25 4
gpt4 key购买 nike

我已经让我的代码进入了创建几个线程的状态,然后在这些线程中我使用了一个库框架,该框架在我的应用程序的生命周期中生成了一些额外的线程。

我无法控制在库框架内生成多少线程,但我知道它们存在,因为我可以在 Eclipse 调试器中看到它们,我已将在库框架外使用的线程保持在最低限度,因为我您确实不想要多线程应用程序,但有时您也需要。

现在我需要使用套接字和 I/O 进行操作,这两者在多线程环境中本质上都很难处理,虽然我想让我的程序线程安全,但我宁愿首先不要进入这种情况,或者至少尽量减少发生的情况,我试图减少多线程的类对时间不敏感,我希望它们“在有时间时”完成。碰巧,懒惰的工作都在同一个类定义中,但由于某些原因,该类被实例化了很多。

我想知道是否可以使单类型类在从多个线程实例化时仅使用一个线程,以及如何实现?

我想实现这一点的唯一方法是创建一个单独的线程,专门用于处理和处理单个类类型的实例。

或者我只需要考虑一种新的方法来构建我的代码?

编辑:包括我的应用程序架构的示例;

public class Example {
public ArrayList<ThreadTypeA> threads = new ArrayList<ThreadTypeA>();
public static void main(String[] args) {
threads.add(new ThreadTypeA());
// left out how dataObj gets to ThreadTypeB for brevity
dataObj data = new dataObj(events);
}
}

public ThreadTypeA {
public ArrayList<ThreadTypeB> newThreads = new ArrayList<ThreadTypeB>();
public Thread thread = new Thread(this, "");
}

public ThreadTypeB {
// left out how dataObj gets to ThreadTypeB for brevity
public libObj libObj = new Library(dataObj);
}

public Library {
public Thread thread = new Thread(this, "");
@Override
public void editMe(dataObj) {
dataObj.callBack();
}
}

public dataObj(events) {
public void callMe() {
for (Event event: events) {
event.callMe();
}
}
}

可以调用许多不同的事件,包括写入文件、进行 SQL 查询、发送电子邮件以及使用专有的以太网串行通信。我希望所有事件都在同一个线程上按顺序运行。

最佳答案

考虑使用 Callable 或 Runnables,而不是线程。这些是代表要完成的工作的对象。您的代码可以将它们传递给线程池来执行 - 您将得到一个 Future。如果您关心答案,您将在 future 上调用 get ,并且您的代码将等待执行完成。如果是“即发即忘”,那么您可以放心,它已排队并且会及时完成。

通常,将执行代码与运行它的线程分离以允许这样的模式更有意义。

关于java - java中单个类的线程减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29169489/

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