我正在用 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
类中处理的一部分。我构建代码的方式不允许重用代码。什么是更好的结构来解决这个问题?
最佳答案
您可以:
- 使
Thread1
和Thread2
扩展相同的抽象基类,并将共享逻辑移至父级(继承)。 - 创建一个两个类都实现并包含通用方法的通用接口(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/