[英]Convert several Java methods to run as non-blocking threads?
是否可以轉換許多方法(在接口中定義並在類中實現)作為非阻塞線程運行?
當然,我可以在線程類的run()方法中包裝每個單獨的方法。 但也許存在一種更復雜的方法來在一個步驟中扭曲幾種不同的方法,即通過單個線程類包裝器?
根據下面'Adamski'的例子,我不想為接口的每個方法創建一個新的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”方法指示應采取的操作。
使它們符合Callable接口並將它們提供給合適的Executor(在Executors中有很多選擇)
而不是從java.lang.Thread
並覆蓋run()
方法,創建一個以所需順序調用方法的java.lang.Runnable
實現會更加清晰。 Runnable
實現可以引用提供這些方法的類,也可以是類本身的一部分。
/**
* Business class that defines the methods to be run in a dedicated thread.
* Classes implementing this interface are responsible for thread safety.
*/
public interface MyBusinessClass {
void a();
void b();
void c();
}
/**
* Runnable implementation that calls the methods defined on MyBusinessClass.
*/
public class MyRunnable implements Runnable {
private final MyBusinessClass bizClass;
public MyRunnable(MyBusinessClass bizClass) {
this.bizClass = bizClass;
}
public void run() {
bizClass.a();
bizClass.b();
bizClass.c();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.