黑马程序员技术交流社区

标题: 这段代码该怎么看 [打印本页]

作者: Miss小强    时间: 2013-4-24 09:25
标题: 这段代码该怎么看
本帖最后由 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处的代码,该怎么解析呢?
作者: wangyougu010    时间: 2013-4-24 09:53
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方法的,我还真没见过,你问下老师吧
作者: Miss小强    时间: 2013-4-24 14:27
问老师,还是发帖子问大家把,论坛上高手如云。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2