java线程的设计模式
我有一个后台服务,每15秒运行一个线程并执行一些工作。java线程的设计模式
public class CacheCleaner implements Runnable, BackgroundService {
....
@Override
public void run() {
....
}
}
BackgroundService是我用系统中的每个后台服务实现的方法定义的另一个接口。
public interface BackgroundService
{
String getName();
void start(long initialDelay);
.....
}
的问题是,我想要做的每一个这样的类的run方法的一些工作(3-4行的基本代码)(也有他们的10-15)。有没有设计模式或更好的方法可以实现这一点,而不是在15种运行方法的每一种中粘贴4行?
注:我提到了run()方法,因为我只想在线程处于活动状态时执行这4行代码。
您可以使用继承......例如,
public abstract class AbstractBaseRunnable implements Runnable {
...
@Override
public void run() {
... // base work here!
}
}
public class CacheCleaner extends AbstractBaseRunnable implements BackgroundService {
...
@Override
public void run() {
super.run();
... // particular work for CacheCleaner here!!
}
}
啊。这里有同样的想法,但我太慢了;-) – TMichelsen
这对我来说非常适合。谢谢! :) –
你可以创建包含3-4行的基本代码和每一个你10-15后台服务继承它的抽象类。
public abstract class AbstractBackgroundService implements Runnable,BackgroundService{
@Override
public final void run() {
prepareRun();
runImpl();
}
private void prepareRun() {
// your 3-4 lines basic code
}
protected abstract void runImpl();
}
我想你可以做类似的事情。
public abstract class Task implements Runnable {
@Override
void run() {
//do ur common stuff here (3-4 lines of code that u mentioned)
execute();
}
public abstract void execute();
}
您实现了Runnable/Callable,无论你喜欢还是需要。在上面的代码中,“Task”类实现了Runnable,并且还实现了“run()”方法。在“run()”方法中,你可以做任何你想做的事情,并声明一个抽象方法“execute()”,这个方法可以由实现类根据需要实现。您的“CacheCleaner”将如下所示:
public class CacheCleaner extends Task implements BackgroundService {
....
@Override
public void execute() {
....
}
}
使'BackgroundService'实现'Runnable'并定义了'run'吗? – ChiefTwoPencils
你能提供一个更完整的例子吗?如果你有一个带有run方法的抽象类,那么扩展它,你可以调用'super.run()' –