【问题标题】:Is this FrameWork in Java Possible?Java中的这个框架可能吗?
【发布时间】:2013-12-29 07:01:51
【问题描述】:

我正在创建一个框架,它运行线程并调用其他处理程序的回调..我想知道这种结构是否有意义,如果不是什么缺点以及如何改进它..

class abstract Main {
public abstract void  handle();
}

Class  Sub {
Main m = null;

public Sub (Main m)
{
  this.m = m;
}
public callBack() { m.handle(); }

}

class A extends Main implements Runnable 
{

public Sub obj = null;
public A  () {} 
public void setB(Sub b) { obj = b;} 

public run()
{
 /*do some process than call the callback of Sub */
  b.callback();
 }
 public handle() {  /* main handle */} 

 }

 public static void main(String[] args) {
  A aobj = new A();
  Sub newb = new Sub(aobj);
  aboj.setB(newb);
  aboj.run();
  }

【问题讨论】:

  • 这里有单线程应用程序。您不会通过调用run() 方法来启动新线程。请参阅docs.oracle.com/javase/tutorial/essential/concurrency/… 了解更多信息。您尝试创建的内容可能已经完成 - 请参阅“执行者”段落。不要重新发明轮子。
  • runnable 的 run 方法不应该直接调用,而是使用 Thread 或运行 runnable 的东西。考虑到这一点,这段代码对我来说似乎不是最先进的。
  • 所以如果我想在线程调用处理程序回调的地方创建多线程,我需要做哪些更改?
  • 除了一些小的语法缺陷(“class abstract”而不是“abstract class”,缺少“void”),大小写问题(“Class”而不是“class”,“callback”而不是“callBack”)和拼写错误(“aboj”而不是“aobj”),您的代码将按预期方式编译和工作。但是,仅调用 Runnable.run() 不会创建线程,因此您的所有代码都将在单个线程中运行。
  • 抱歉错字.. 它只是一个模型来解释我的框架。如果我想创建线程,我所做的 A 类已经扩展 Main

标签: java performance architecture frameworks


【解决方案1】:

为了在单独的线程中运行处理程序,将对 run() 的调用替换为

new Thread(aobj).start();

【讨论】:

  • 这会运行线程,但我希望每 X 次运行一次,而不是我需要做的......它会是多线程吗?
【解决方案2】:

收听作业完成是有意义的 - 即一个流行的库 Guava 使用 ListenableFutureMoreExecutors 实现了这一点。您将工作提交给执行者,收到一个未来,您可以向其中添加一个Runnable,该Runnable 将在任务完成时执行。

如果您需要定期执行,请查看Executors.newScheduledThreadPool()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2011-05-16
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多