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行代码。

+0

使'BackgroundService'实现'Runnable'并定义了'run'吗? – ChiefTwoPencils

+1

你能提供一个更完整的例子吗?如果你有一个带有run方法的抽象类,那么扩展它,你可以调用'super.run()' –

您可以使用继承......例如,

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!! 
    } 
} 
+0

啊。这里有同样的想法,但我太慢了;-) – TMichelsen

+0

这对我来说非常适合。谢谢! :) –

你可以创建包含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() { 
    .... 
} 
}