当前位置: 首页 > 知识库问答 >
问题:

如何将可调用的转换为可运行的

公羊雅达
2023-03-14

我有一个实现可调用接口的类。我想为类调度一个任务,使用schduledExecutorService接口的schduleAtFixed速率方法。但是需要一个可运行的对象作为它可以调度的命令。

因此,我需要某种方法来将可调用转换为可运行。我试过简单的铸造,但不起作用。

示例代码:

package org.study.threading.executorDemo;

import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

class ScheduledExecutionTest implements Callable<String> {

    @Override
    public String call() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("inside the call method");
        return null;
    }

}
public class ScheduledExecution {
    public static void main(String[] args) {
        ScheduledExecutorService sec = Executors.newScheduledThreadPool(10);
        sec.scheduleAtFixedRate(new ScheduledExecutionTest(), 5, 2, TimeUnit.SECONDS);
    }
}

共有3个答案

周育
2023-03-14

JDK有一个util方法来实现这一点:

Runnable runnable = ..
Executors.callable(runnable);
茅才
2023-03-14

假设您不需要Callable来返回任何有用的内容,您可以将Callable包装为Runnable

Runnable run = new Runnable() {
    public void run() {
        try {
            Object o = callable.call();
            System.out.println("Returned " + o);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};

或者使用Java8

Runnable run = () -> {
    try {
        Object o = callable.call();
        System.out.println("Returned " + o);
    } catch (Exception e) {
        e.printStackTrace();
    }
};

这是相当混乱的,但听起来Callable一开始就应该是Runnable,您不必这样做。

苏鸿卓
2023-03-14
FutureTask task1 = new FutureTask(Callable<V> callable)

现在这个task1可以运行了,因为:

    类未来任务

所以从上述两个关系来看,task1是可运行的,可以在Executor.execute(Runnable)方法中使用

 类似资料:
  • 问题内容: 我正在寻找一种无需使用py2exe将Python程序转换为.exe文件的方法。py2exe说它需要Python 2.6,它已经过时了。有没有办法使最终用户不必安装Python就可以分发我的Python程序? 问题答案: 请理解,每个用于Python的“冻结”应用程序都不会以任何方式真正保护您的代码。每个用于独立可执行Python“程序”的打包系统都将包含许多Python库和解释器,这将

  • 我想用可选的。由于只能连接流,我有以下问题: 如何将可选 转换为流 ? 示例:

  • 问题内容: 我目前正在尝试将某些行PIVOT转换为列。问题是我并不总是知道有多少行可用。让我们看一个例子: 结果” 静态枢纽的SQL FIDDLE范例。我正在尝试实现动态枢轴-http://sqlfiddle.com/#!3/ 2be82/1 因此,这是我的难题:在这种情况下,我希望能够基于GroupID透视未知数量的列。 我希望能够将GroupID 3中的所有行都列为PIVOT。我需要在不知道g

  • 问题内容: 如何将使用lwuit库的J2ME应用程序转换为android apk? 我尝试使用mircoemulator进行转换,但是当我启动应用程序时,它显示错误并退出。 问题答案: 阅读本文LWUIT for Android。这里清楚地讲述了如何使用Android进行LWUIT。仔细遵循stpes并更改您的MIDlet代码。只需签出LWUIT- Incubator 存储库,并将其用于LWUIT

  • 问题内容: 我有一组YYYYMMDDHHMMSS格式的日期/时间字符串,我想将其转换为实用程序可读的格式。通常,我可以执行以下操作: 但是,不喜欢YYYYMMDDHHMMSS: ..失效日期 因此,我可能需要将字符串优化为以前的格式。我在想这是答案,但是它很快变得很难看。我确定我的字符串将是正确的格式,那么如何轻松转换它们呢? 问题答案: 日期不允许使用“ YYYYMMDDHHMMSS”,但它允许

  • 继承了一个iterator()方法来生成。 但我需要一个而不是。