首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java线程的设计模式

java线程的设计模式
EN

Stack Overflow用户
提问于 2016-07-22 05:26:42
回答 3查看 1K关注 0票数 1

我有一个后台服务,它每15秒运行一次线程,并做一些工作。

代码语言:javascript
复制
public class CacheCleaner implements Runnable, BackgroundService {
    ....

    @Override
    public void run() {
      ....
    }
}

BackgroundService是我用方法定义的另一个接口,我希望系统中的每个后台服务都能实现这些方法。

代码语言:javascript
复制
public interface BackgroundService
{
   String getName();
   void start(long initialDelay);
   .....
}

问题是,我想在每个这样的类的run方法中做一些工作(3-4行基本代码)(其中有10-15行)。是否有一种设计模式或更好的方法来实现这一点,而不是复制粘贴15个运行方法中的每一行中的4行?

注意:我提到了run()方法,因为我只希望在线程处于活动状态时执行这4行代码。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-22 05:34:02

你可以使用继承..。例如,

代码语言:javascript
复制
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!!
    }
}
票数 3
EN

Stack Overflow用户

发布于 2016-07-22 05:40:00

我想你可以做点类似的事。

代码语言:javascript
复制
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();

}

您可以实现您喜欢/需要的可运行/可调用的。在上面的代码中,"Task“类实现Runnable,还实现了"run()”方法。在这里,在"run()“方法中,您可以做您想做的任何常见事情,并声明一个抽象方法"execute()”,该方法可以根据需要由实现类实现。您的"CacheCleaner“将如下所示:

代码语言:javascript
复制
public class CacheCleaner extends Task implements BackgroundService {
 ....

 @Override
 public void execute() {
  ....
 }
}
票数 1
EN

Stack Overflow用户

发布于 2016-07-22 05:35:06

您可以创建一个包含3-4行基本代码的抽象类,并对每个10-15个后台服务进行子类化。

代码语言:javascript
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38518803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档