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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 走遍世界找寻你 中级黑马   /  2013-11-12 09:25  /  1222 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
        }

}

5 个回复

倒序浏览
  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:17
藤椅
本帖最后由 FFF 于 2013-11-12 09:50 编辑

有效范围的问题。
你把t1定义成了内部类,内部类用完就丢掉(释放)了。后面就当然用不到了!错误就是发生在这里。你要么定义为正常的类,要么加上final最终。把他变成一个常量(用完也不丢掉,不释放);
回复 使用道具 举报
大哥,是内部类使用的问题。ti属于内部类,老毕讲过,内部类访问局部变量的话,必须前面要用final修饰符的~~
回复 使用道具 举报
一直很安静 来自手机 中级黑马 2013-11-12 10:06:42
报纸
内部类被定义在了局部位置、只能访问被final修饰局部变量,也就是说t1应该加上最终修饰符 毕老师第07 天07final有讲到。
回复 使用道具 举报
奥 知到下了谢谢,忘写了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马