以前看到有人问过,找不到了,我想问下为什么会是显示“Thread”
- Thread th=new Thread(new Runnable() {
- @Override
- public void run() {
- //线程任务
- System.out.println("Runnable");
- }
- }){
- @Override
- public void run() {
- //线程任务
- System.out.println("Thread");
- }};
- th.start();
复制代码 API的说明
public void run()
如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。 Thread 的子类应该重写该方法。
我开始认为是由于我新的匿名Thread类没有以Runnable为参数的构造函数,所以导致参数其实未传进去,为了验证是否传进去了
- Thread th=new Thread(new Runnable() {
- public void run() {
- System.out.println("Runnable");
- }
- }) {
- /**空**/
- };
- th.start();
复制代码 显示正确,说明参数被正确传进去了。
突然发现写着写着就解决。。。
因为Runnable在Thread中只是一个成员变量,它的调用依赖于Thread默认的run方法,只要重写了run方法,target的调用有无从获得了。
- public void run() {
- if (target != null) {
- target.run();
- }
- }
复制代码 本来想当作问题来发的,没想到写着写着就解决了。突然会想起了当时看视频貌似老师也是这么解释的。不过也算了解了匿名类也是可以把参数传递进去的,而且自动调用的父类响应的构造函数调用的。
|