Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提交时,类实现可调用和类不';t、 执行人服务_Java_Multithreading_Threadpool_Executorservice_Callable - Fatal编程技术网

Java 提交时,类实现可调用和类不';t、 执行人服务

Java 提交时,类实现可调用和类不';t、 执行人服务,java,multithreading,threadpool,executorservice,callable,Java,Multithreading,Threadpool,Executorservice,Callable,我不熟悉这个话题。我需要异步地将任务提交给executor服务,还需要获取响应。我尝试过下面的例子 案例1: public class Task implements Callable<Integer> { Integer i; public Task(Integer i){ this.i = i; } @Override public Integer call(){ doTask(); } pu

我不熟悉这个话题。我需要异步地将任务提交给executor服务,还需要获取响应。我尝试过下面的例子

案例1:

public class Task implements Callable<Integer> {
    Integer i;
    public Task(Integer i){
        this.i = i;
    }
    @Override
    public Integer call(){
        doTask();
    }
    public Integer doTask(){
        syso(i);
        return i;
    }
}

public class ExecuteTask(){
    public void static main (String [] args){
        ExecutorService service = Executor.newCachedTheadPool();

        for(int i = 0; int <10; i++) {
            service.sumbit(new Task(i).doTask());
        }
    }
}
Output: 0,1,2,3,4,7,9,5,8,6 (expected)
公共类任务实现可调用{
整数i;
公共任务(整数i){
这个。i=i;
}
@凌驾
公共整数调用(){
doTask();
}
公共整数doTask(){
syso(i);
返回i;
}
}
公共类ExecuteTask(){
公共void静态main(字符串[]args){
ExecutorService=Executor.newCachedHeadPool();

对于(int i=0;int,如果我正确理解了您的问题:您可以使用lambda或方法引用,而这些引用不必显式实现Callable。只需遵循相同的约定:返回某些内容(而不是像Runnable那样为void)并能够引发异常。
(不过,这只适用于Java 8+)

我没有传递其他要提交的内容,我已经在for循环中明确声明了可调用匿名类。我的代码将编译,并且我已经提到,只有在不将I声明为全局变量的情况下,才会出现此错误。确定。第一个代码段:任务实现可调用,但不重写call()。因此无法编译。使用Executor.newCachedHeadPool(),它不存在。第二个代码段:调用不存在的方法syso。第三个代码段:使用名为
int
的未定义变量。不可能编译。尝试使用匿名类中的非最终变量。无法编译。请尝试获取问题的上下文并尝试回答我的问题。我没有复制粘贴的实际代码here(所以它只是int而不是object)…并使用syso作为System.out.println的捷径。是的,我同意我没有首先覆盖调用。我现在已经添加了。你不能访问实例变量
I
form static method
main
。我必须是静态的。Re,“我没有复制粘贴我的实际代码,”好吧,你来这里是因为你的代码有些地方你不明白。那么你怎么能确定你没有遗漏重要的部分呢?最好的问题包含一个其他人可以编译和运行的代码示例,这与你期望它做的不同。我想提交通过使用匿名内部类(如我在案例2中所写)来调用executorservice的任务。但是我看到,通过这样做,我得到的输出与实现可调用的任务不同。我这样问是因为如果不建议通过案例2提交任务,那么我将强制任务类的实现者执行我告诉你,你可能根本不需要一个匿名类:Executors.newCachedThreadPool().submit(SomeClass::doesNotImplementCallable);只要它返回一些东西并可以抛出异常,就可以很好地工作。谢谢你。你会选择这个并接受它作为答案。
public class Task {
    Integer i;
    public Task(Integer i){
        this.i = i;
    }
    public Integer doTask(){
        syso(i);
        return i;
    }
}

public class ExecuteTask(){
    int i;
    public void static main (String [] args){
        ExecutorService service = Executor.newCachedTheadPool();

        for(i = 0; int <10; i++) {
            service.sumbit(new Callable<Integer>(){
                @Override
                public Integer call() {
                    Integer int = new Task(i).doTask();
                    return int;
                }
            });
        }
    }
}
Output: 1,3,3,6,6,6,10,10,10,10 (not expected)