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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Miss小强 中级黑马   /  2013-4-24 09:25  /  1620 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Miss小强 于 2013-5-12 10:26 编辑
  1. new Thread(new Runnable() {

  2.                         @Override
  3.                         public void run() {
  4.                                 while (true) {
  5.                                 //22222222
  6.                                         System.out.println(Thread.currentThread().getName()
  7.                                                         + "thread ...");
  8.                                 }

  9.                         }
  10.                 }) {
  11.                         @Override
  12.                         public void run() {
  13.                                 while (true) {
  14.                                 //1111
  15.                                         try {
  16.                                                 Thread.sleep(10);
  17.                                         } catch (InterruptedException e) {
  18.                                                 // TODO Auto-generated catch block
  19.                                                 e.printStackTrace();
  20.                                         }
  21.                                         System.out.println(Thread.currentThread().getName()
  22.                                                         + "haha");
  23.                                 }
  24.                         }

  25.                 }.start();
复制代码
我知道结果是执行11111处的代码,该怎么解析呢?

2 个回复

倒序浏览
class Test{
        public static void main(String[] args) {
                        new Thread(new Runnable() {//通过Runnable内部类来创建线程,重写run方法
       
                    @Override
                    public void run() {
                            while (true) {//死循环
                            //22222222
                                    System.out.println(Thread.currentThread().getName()
                                                    + "thread ...");
                            }
       
                    }
            }) //标号(1)
                       
                        {
                    @Override
                    public void run() {
                            while (true) {
                            //1111
                                    try {
                                            Thread.sleep(10);
                                    } catch (InterruptedException e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                    }
                                    System.out.println(Thread.currentThread().getName()
                                                    + "haha");
                            }
                    }
       
            }.start();//标号(2)                启动线程
               
        }
}
我加了一些注释,里面有两个标号,如果你把调用线程放在标号(1)的位置,那么执行的是第一个run方法的内容,如果放在标号(2)的位置,也就是你这个程序,执行的就是第二个run方法的内容,至于这种两个run方法的,我还真没见过,你问下老师吧
回复 使用道具 举报
问老师,还是发帖子问大家把,论坛上高手如云。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马