如果我们在Java多线程中的executorService执行调用中传递线程,会发生什么情况

维杰·詹吉德

请参阅以下两个示例:

例1

public static void main(String[] args) throws InterruptedException {

ExecutorService executorService = Executors.newCachedThreadPool();
        
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                //work
                for (int i = 0 ; i < 5 ; i++){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        executorService.execute(thread1);
        executeService.shutdown();
}

实施例2

public static void main(String[] args) throws InterruptedException {

        ExecutorService executorService = Executors.newCachedThreadPool();

        executorService.execute(new Runnable() {
            @Override
            public void run() {
                //work
                for (int i = 0 ; i < 5 ; i++){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        executeService.shutdown();
    }

两种情况下的结果都相同,但是我的一个来自StackOverflow的朋友alexei-kaigorodov在此问题中)在评论中说

“ executorService是替代的替代方法。将线程放入executorService是没有意义的。首先,创建Runnable,然后将其作为线程的参数并启动该线程,或者将可运行的变量提交给executorService。”

我希望我对我的问题很清楚,所以请告诉我将runnable传递给ExecuteService与将线程传递给ExecutableService的区别。

利诺

Thread implements Runnable因此,求职者服务将接受它为simple Runnable,从而调用该Thread.run()方法。

这意味着它Thread本身将永远不会启动,除非您start()自己调用其方法,在这种情况下,结果是绝对不确定的。

因此,您可以说代码片段的行为相同,只是将a传递RunnableExecutorService,然后通过调用Runnable.run()方法来执行它

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果我使用JNI从C的多个线程中调用Java函数,会发生什么情况?

如果我们在App Delegate中的didFinishLaunching中返回NO,会发生什么情况

如果我在线程池中发布了工作并且线程已经在Boost中工作,会发生什么情况?

如果我们不订阅HttpClient请求,该请求返回angular中的observables,会发生什么情况

当线程进入Java中的同步块/方法时会发生什么情况

如果线程执行的函子被移动,会发生什么情况?

如果线程池已满时我的线程睡眠时间大于保持活动秒数,会发生什么情况?

当我在Clojure中从多个线程定义一个变量时会发生什么情况?

从C中main返回时,正在运行的线程会发生什么情况?

结束后在进程中启动的线程会发生什么情况

在同步方法内部的线程中的同步块会发生什么情况?

如果我们用定界符分割却连续有多个定界符,会发生什么情况?

如果我不在扩展类中调用可选的超级方法或构造函数,会发生什么情况?

当我们有多个 Java 线程时,运行时会发生什么?

如果在事务执行过程中终止JVM进程,会发生什么情况?

如果从类文件中删除超级构造函数调用,会发生什么情况?

如果在匿名子程序中调用shift,会发生什么情况?

我们如何在Java中调用多个线程?

如果我们在 start 方法而不是 run 方法中执行整个 Thread 功能会发生什么?

当我们使用json键作为JS代码时会发生什么情况?

当我们将jar提交给风暴集群时会发生什么情况?

如果我在Spark中两次缓存相同的RDD,会发生什么情况?

如果我取消选中“软件和更新”中的所有PPA,会发生什么情况?

当我在shell中执行文件时,会发生什么情况?

将方法作为目标执行的线程会发生什么情况

等待加入条件变量的线程会发生什么情况?

如果不引用对象,Java中的对象会发生什么情况,例如:myString.concat(“ that”)

如果子类未在Java中定义构造函数,会发生什么情况?

我们如何在多线程进程的strace输出中获取线程的线程ID?