A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李贺晓 中级黑马   /  2012-10-26 22:03  /  1350 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class ThreadTest
{
        public static void main(String[] args)
        {
                new Thread()
                {
                        public void main()
                        {
                                for(int i=0;i<80;i++)
                                {
                                        System.out.println(Thread.currentThread().getName()+"...."+i);
                                }
                        }
                }.start();

                for(int i=0;i<80;i++)
                                {
                                        System.out.println(Thread.currentThread().getName()+"...."+i);
                                }

                /*new Runnable()
                {
                        public void main()
                        {
                                for(int i=0;i<80;i++)
                                {
                                        System.out.println(Thread.currentThread().getName()+"...."+i);
                                }
                        }
         
                }.start();---------这里为什么不能用start方法*/

                Runnable r=new Runnable()
                {
            public void main()
                        {
                                for(int i=0;i<80;i++)
                                {
                                        System.out.println(Thread.currentThread().getName()+"...."+i);
                                }
                        }
                };
                new Thread(r).start();

        }
}
用Runnable实现的匿名内部类为什么不能直接在后面跟上start方法

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

2 个回复

正序浏览
大哥。。Runnable是接口,你要实现里面的方法啊。里面只有一个run方法,你却写了个main(),run都执行不了更别说start了。。
  1. Runnable r=new Runnable()
  2.                 {
  3.                                 public void main()
  4.                         {
  5.                                 for(int i=0;i<80;i++)
  6.                                 {
  7.                                         System.out.println(Thread.currentThread().getName()+"...."+i);
  8.                                 }
  9.                         }

  10.                                                 @Override
  11.                                                 public void run() {
  12.                                                         // TODO Auto-generated method stub
  13.                                                         for(int i=0;i<80;i++)
  14.                             {
  15.                                     System.out.println(Thread.currentThread().getName()+"...."+i);
  16.                             }
  17.                                                 }
  18.                 };
  19.                
  20.                 new Thread(r).start();
复制代码
在最后一行代码,楼主你也清楚,想要start得new Thread对象,再把你的r给弄进去。
回复 使用道具 举报
你Runnable创建的对象,并没有传递给Thread的构造函数中,Runnable是没有start()方法的

new Thread(new Runnable() {
                        public void main() {
                                for (int i = 0; i < 80; i++) {
                                        System.out.println(Thread.currentThread().getName()
                                                        + "...." + i);
                                }
                        }
                }).start();// ---------这里为什么不能用start方法
将匿名内部类传递给Thread构造函数就可以了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马