gpt4 book ai didi

java - 如何在定义的线程(池)上运行类的方法?

转载 作者:行者123 更新时间:2023-11-29 07:40:12 26 4
gpt4 key购买 nike

我正在编写一个系列类,全部使用相机。 每个类都有4个基本方法来初始化、启动、停止或释放相机。

我想在后台线程中运行这些方法。但我正在努力寻找一种简单的方法来做到这一点。

我发现的唯一方法是使用定义为

的通用 ExecutorService
ExecutorService backgroundThread = Executors.newSingleThreadExecutor();

然后,我必须像这样包装每个方法的代码:

public void start(){
AbstractLight.backgroundThread.execute(new Runnable(){
public void run(){
//write "start method" code here
}
});
}

我想有更聪明的方法来做到这一点,但我不知道。有人有办法做到这一点吗?

谢谢

最佳答案

您可以创建一个包含这些方法的“异步”版本的抽象父类。

从一个抽象的父类开始,并将它们中的每一个包装在它们自己的可运行异步版本中。现在,每当您从抽象父级继承时,每个父级都会自动拥有自己的可运行对象。然后,您可以将它们放入遗嘱执行人或您需要从 parent 那里得到的任何东西。

public abstract class CameraParent
{
public abstract void init();
public abstract void start();
public abstract void stop();
public abstract void release();

public virtual Runnable initAsync()
{
Runnable r = new Runnable()
{
@Override
public void Run()
{
init();
}
}
return r;
}

public virtual Runnable startAsync()
{
Runnable r = new Runnable()
{
@Override
public void Run()
{
start();
}
}
return r;
}

public virtual Runnable stopAsync()
{
Runnable r = new Runnable()
{
@Override
public void Run()
{
stop();
}
}
return r;
}

public virtual Runnable releaseAsync()
{
Runnable r = new Runnable()
{
@Override
public void Run()
{
release();
}
}
return r;
}
}

这将为您正在编写的整个类系列提供良好的基础,而无需在各处放置 Runnable。

如果您想要强制所有这些在后台线程上运行,请保护抽象方法。然后将您的执行程序服务放在父类中,而不是返回 Runnable,而是在执行程序服务中启动它。

您的每个子类现在都自动拥有所有异步操作,但您只需实现这四种方法即可。

关于java - 如何在定义的线程(池)上运行类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30981975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com