java - 将多个 Java 方法转换为非阻塞线程运行?

标签 java multithreading interface methods nonblocking

是否可以将多个方法(在接口(interface)中定义并在类中实现)转换为非阻塞线程运行?

当然,我可以将每个单独的方法包装在线程类的 run() 方法中。但也许存在一种更复杂的方法可以在一个步骤中扭曲多个不同的方法,即通过单个线程类包装器?

根据下面的“Adamski”示例,我不想为接口(interface)的每个方法创建一个新的 Runnable 类,即我想避免以下情况:

public interface MyBusinessClass 
{
    void a();
    void b();
}


public class MyRunnable_a  implements Runnable 
{
    private final MyBusinessClass bizClass;
    public MyRunnable_a(MyBusinessClass bizClass) { this.bizClass = bizClass; }

    public void run() { bizClass.a(); }
}


public class MyRunnable_b  implements Runnable 
{
    private final MyBusinessClass bizClass;
    public MyRunnable_b(MyBusinessClass bizClass) { this.bizClass = bizClass; }

    public void run() { bizClass.b(); }
}

最佳答案

根据您上面的问题和评论,您希望调用一个方法来导致任务的异步执行。最好的方法是通过 Runnable 和 ExecutorService 的实例。

public class MyBusinessClass {
  ExecutorService myExecutor = Executors.newCachedThreadPool(); //or whatever

  void a(){
    myExecutor.execute(new Runnable() {
        public void run() {
          doA();
        }
    });
  }    

  void b(){
    myExecutor.execute(new Runnable() {
        public void run() {
          doB();
        }
    });
  }    
}

这样想,为了异步运行,您需要向另一个线程发送某种消息以指示它应该工作。 java.util.concurrent 包中的 Executor 框架是形成这些消息的标准化方法。它们的形成方式使得 Runnable 实例上的“run”方法指示应采取哪些操作。

关于java - 将多个 Java 方法转换为非阻塞线程运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710137/

相关文章:

java - android.media.audiofx.Visualizer 每隔一段时间抛出异常

C# 线程同步监视器 + ResetEvent

go - golang中的可变参数函数

java - 在 macosx 上将 launch4j 作为 ant 构建任务运行

java - 我应该使用哪种数据结构来维护这些信息?

Java删除对象

multithreading - Interlocked.CompareExchange 的返回值是否有充分的理由

Java ScheduledThreadPoolExecutor 运行延迟 15 毫秒/时间不一致?

sql - Go SQL 扫描/值接口(interface)问题

web-applications - 何时在 Web 界面和原生 GUI 之间进行选择?