黑马程序员技术交流社区

标题: 大神来指点怎么出错了 [打印本页]

作者: 走遍世界找寻你    时间: 2013-11-12 09:25
标题: 大神来指点怎么出错了
public class Demo10_Join {

        /**
         * @param args
         */
        public static void main(String[] args) {
                Thread t1 = new Thread() {
                        public void run() {
                                for(int x = 0; x < 10; x++) {
                                        try {
                                                Thread.sleep(10);
                                        } catch (InterruptedException e) {
                                               
                                                e.printStackTrace();
                                        }
                                        System.out.println("aaaaaaaaaaaaaaaa");
                                }
                        }
                };
               
                Thread t2 = new Thread() {
                        public void run() {
                                for(int x = 0; x < 10; x++) {
                                        try {
                                                if(x == 2)
                                                        //t1.join();                        //让当前线程暂停,指定的线程执行,执行完后再让当前线程执行
                                                        t1.join(30);
                                                Thread.sleep(10);
                                        } catch (InterruptedException e) {
                                               
                                                e.printStackTrace();
                                        }
                                        System.out.println("bb");
                                }
                        }
                };
               
                t1.start();
                t2.start();
        }

}


作者: Sasson    时间: 2013-11-12 09:32
  1. public class Demo10_Join {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.            final Thread t1 = new Thread() {   // 错误: 从内部类中访问本地变量t1; 需要被声明为最终类型  t1前面加个final 声明称最终类型,就可以访问了
  7.                         public void run() {
  8.                                 for(int x = 0; x < 10; x++) {
  9.                                         try {
  10.                                                 Thread.sleep(10);
  11.                                         } catch (InterruptedException e) {
  12.                                                 
  13.                                                 e.printStackTrace();
  14.                                         }
  15.                                         System.out.println("aaaaaaaaaaaaaaaa");
  16.                                 }
  17.                         }
  18.                 };
  19.                
  20.                 Thread t2 = new Thread() {
  21.                         public void run() {
  22.                                 for(int x = 0; x < 10; x++) {
  23.                                         try {
  24.                                                 if(x == 2)
  25.                                                         //t1.join();                        //让当前线程暂停,指定的线程执行,执行完后再让当前线程执行
  26.                                                         t1.join(30);
  27.                                                 Thread.sleep(10);
  28.                                         } catch (InterruptedException e) {
  29.                                                 
  30.                                                 e.printStackTrace();
  31.                                         }
  32.                                         System.out.println("bb");
  33.                                 }
  34.                         }
  35.                 };
  36.                
  37.                 t1.start();
  38.                 t2.start();
  39.         }

  40. }
复制代码

作者: FFF    时间: 2013-11-12 09:49
本帖最后由 FFF 于 2013-11-12 09:50 编辑

有效范围的问题。
你把t1定义成了内部类,内部类用完就丢掉(释放)了。后面就当然用不到了!错误就是发生在这里。你要么定义为正常的类,要么加上final最终。把他变成一个常量(用完也不丢掉,不释放);
作者: Θ动@咚Θ    时间: 2013-11-12 10:04
大哥,是内部类使用的问题。ti属于内部类,老毕讲过,内部类访问局部变量的话,必须前面要用final修饰符的~~
作者: 一直很安静    时间: 2013-11-12 10:06
内部类被定义在了局部位置、只能访问被final修饰局部变量,也就是说t1应该加上最终修饰符 毕老师第07 天07final有讲到。
作者: 走遍世界找寻你    时间: 2013-11-13 20:35
奥 知到下了谢谢,忘写了




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