我很困惑(java的新手):
在实现Runnable接口时,必须覆盖run()方法以获得线程执行功能。实现此接口会使您的对象成为Runnable (?)类型。如何通过简单地实现Runnable接口来“注入”线程功能?基本上,当您实例化一个实现Runnable的类时,线程功能中发生了什么?我可能误解了一些基本的面向对象的概念。谢谢。
在执行thread.start()时,是不是JVM“知道”要寻找可运行的对象?
发布于 2010-09-25 03:35:49
当您创建Runnable的实现时,没有任何东西将您的类与JVM线程容量联系在一起。Runnable接口的实例类似于任何其他接口的实例,只是另一个实例。
如果希望使用JVM的线程系统,则必须使用Thread类的新实例,该实例将在单独的线程中运行Runnable实现的run()方法。
有关创建新线程的所有逻辑都是由Thread类完成的。
发布于 2010-09-25 03:35:28
Runnable表示“可以”在单独的线程中运行的工作,也可以不在单独的线程中运行(您可以自己调用Runnable.run() )。
但是,要在单独的线程中调用Runnable,然后执行如下操作
Thread thread = new Thread(new MyRunnable());
thread.start(); // MyRunnable will now be invoked in a new thread发布于 2010-09-25 03:35:41
实际上,在后台并没有发生什么特别的事情。
实现Runnable接口可以确保您的类将具有public void run()方法。
当你把你的自定义类传递到一个Thread中时,神奇的事情就发生了。
Thread th = new Thread(new YourCustomRunnable());
th.start();在上面的代码中,将创建一个新的Thread,并且run()方法中的代码将在另一个线程中运行。
在内部,线程将调用您的自定义run()方法,并使该代码在单独的线程上运行。从技术上讲,可以做到以下几点:
Runnable r = new MyCustomRunnable();
r.run();在上面的代码中,r不会在单独的线程上运行。
https://stackoverflow.com/questions/3790355
复制相似问题