java – 可调用线程与可运行线程与扩展线程

我最近通过实现Runnable或Extending线程以及上一次实现Callable来阅读有关在java中创建Threads的内容. *上的Runnable Versus Callable个线程描述了引用的差异两者都是针对其实例可能由另一个线程执行的类而设计的.这是什么意思?它会创建新线程吗?如果是,为什么我们需要将实现Runnable的类传递给Thread构造函数?

另外,我看到了通过实现Runnable或Extending线程来创建线程的方法.在第一种方法中,(在我找到的教程中),我们需要调用Thread类,它需要Runnable实例来启动线程.但是,我找不到Callable类似的东西,因为没有接受Callable的Thread构造函数. Executor框架或Future Task用于运行这些线程.那么为什么我们说两种方式都是相同的(除了Callable重新实现某些东西并且可以抛出异常).

最后,是写作

Thread t = new Thread();
Thread t1 = new Thread(new RunnableInstance());

这些是否在系统中创建了新的线程?有没有其他方法使用Runnable创建新线程而不将其作为构造函数传递给Thread类?

这不应该是一个重复的问题.

解决方法:

这是什么意思?它会创建新线程吗?

Callable和Runnable都只是接口,它们不会自己创建任何线程.相反,他们为开发人员提供API和抽象.当您想在单独的线程中执行某些代码时,通常会实现Runnable,然后您可以决定如何执行它.它还没有绑定任何线程.你有很多选择:

>在新线程中执行它
>使用一些ExecutorService执行它
>或者直接调用它

如果是,为什么我们需要将实现Runnable的类传递给Thread构造函数?

没有.
由于Runnable不会创建后面的线程(好吧,它根本不能,因为它只是一个接口!),我们需要显式执行这个Runnable.

这些是否在系统中创建了新的线程?

是.

有没有其他方法使用Runnable创建新线程而不将其作为构造函数传递给Thread类?

是.我已经提到过ExecutorService.您可以从线程池或完成服务中获利,请查看APIexamples.

上一篇:python – 什么是“可调用”?


下一篇:Callable与Runnable