java - 我如何构建多线程代码以更好地重用java中的代码?

标签 java multithreading code-reuse code-structure

我正在用 Java 构建一个多线程项目,我有实体和 DAO 包来包装数据库表并操作它们。我有包含 Runnables 的处理包。到目前为止我实现 Runnables 的方式是这样的:

Class Thread1 implements Runnable{
  Thread t;
   parameters
  ...

  public Thread1(){
    t = new Thread(this,"Thread1");
    ....
    t.start();
  }

  public int method1(){
  ...
  return x;
  }

  public double method2(){
  ...
  return y;
  }

  public void run(){
    // some processing using DAO methods
    ....
    method1();
    ... 
    method2();
    ...
  }

}

代码以这种方式工作,但我需要在 run() 方法中使用相同的处理作为 Thread2 类中处理的一部分。我构建代码的方式不允许重用代码。什么是更好的结构来解决这个问题?

最佳答案

您可以:

  1. 使 Thread1Thread2 扩展相同的抽象基类,并将共享逻辑移至父级(继承)。
  2. 创建一个两个类都实现并包含通用方法的通用接口(interface),然后创建一个实现 Runnable 的单独类,并在那里实现 run()(组合) .

您应该始终倾向于组合而不是继承,因此第二个选项通常更好,因为它还为您提供了在运行时更改行为的灵 active 。

例如: 先创建共享接口(interface)

public interface SharedTask {
    public void method1();
    public void method2();
}

让两个类都实现它: 公共(public)类Thread1实现SharedTask公共(public)类Thread2实现SharedTask

public class Worker implements Runnable {

    public Worker (SharedTask task) {
        this.task = task;
        ...
    }

    public void run() {
        task.method1();
        task.method2();
    }
}

代码中的其他地方: new Worker().start();

关于java - 我如何构建多线程代码以更好地重用java中的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301867/

相关文章:

java - Maven 无法解析依赖关系

java - 如何使用自然顺序和比较器编写函数

java - 同步和静态同步有什么区别?

c# - 位图区域已经锁定,多线程环境

java - java中的 volatile 变量强制一个线程读取最新的副本,即从主内存中读取,但在我的情况下它仍然不是

AngularJS + karma : reuse a mock service when unit testing directives or controllers

c# - 如何避免重复条件逻辑?

java - 从文件读取后特殊字符未正确填充

java - 在不使用额外数据结构的情况下从 BST 检索值的排序数组

java - 如何初始化Web应用程序中所有servlet共享的变量