java - 良好的线程设计 : "Method in Thread" or "Thread in Method"

标签 java multithreading algorithm

这只是实际线程设计的一般问题。我专门在 android 上使用 Java,但一般设计将是这个问题的更好重点。

很简单,线程中的方法好还是线程中的方法好。

例子,

假设我们有 3 个方法/函数/等等。

public void readMail()
{
    //Logic...
}
public void postQuestion()
{
    //Logic...
}
public void answerQuestion()
{
    //Logic...
}

有没有更好


A:方法中的线程

public void readMail()
{
    new Thread(new Runnable()
    {
        public void run()
        {
            //Logic
        }
    }).start();
}

然后像在任何 OO 情况下一样调用您的方法。说

Email.readMail();

B:线程内的方法

//note this could be inside a method or a class that extends runnable
new Thread(new Runnable()
{
    public void run()
    {
        readMail();
        postQuestion();
        answerQuestion();
    }
}).start();

最佳答案

Method within Thread

  • [+] 如果您的方法不需要确保并发执行的属性,或者它们具有确定性的运行时行为(时间和性能),则此方法可以作为并发的高级管理应用程序;即并发性保持在对象级别而不是方法级别。
  • [-] 由于并发性保持在线程/对象级别,应用程序可能会失去响应能力 的概念。一个用户可能正在“发布问题”,而另一个用户正在“获取答案”;两者可以同时处理。

Thread with Method

  • [+] 更细粒度的并发控制:每个方法都成为操作系统级别的一个执行单元。这就是为什么正如 @LouisWasserman 所提到的,也许利用 Executor 框架会更有意义。
  • [-] 通常,线程资源丰富并且昂贵;因此,这意味着在高频/负载应用程序中使用多次调用一种方法时,您将遇到性能问题。特别是,如果存在方法间数据/逻辑依赖性。在这方面,同步 也成为一个问题,这就是为什么使用 Actor 模型可以提供更多帮助。

我建议阅读更多关于 Actor models 的内容及其可用的实现。

关于java - 良好的线程设计 : "Method in Thread" or "Thread in Method",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10056507/

相关文章:

linux - 线程在什么情况下会退出或停止运行

c++ - 如何在 C++ 源代码、DLL 或 VC++ 编译器创建的任何文件中查找所有全局变量?

algorithm - 使用 32 位散列时发生冲突的概率

algorithm - 合并 k 个排序数组 - 优先队列与传统合并排序合并,何时使用哪个?

java - 如何使用 JAVA 将图像从 HTML 保存到数据库

java - InputStream 内存泄漏?

java - 使用 JPA/EclipseLink 修改大量对象

java - 如何将值(value)观从私有(private)类(class)转移到另一个类(class)?

c++ - 如何知道 std::thread 在 C++ 中何时完成?

algorithm - graph - 即使在最坏的情况下,如何在线性时间内构建三角形带的图形?