黑马程序员技术交流社区
标题:
大神来指点怎么出错了
[打印本页]
作者:
走遍世界找寻你
时间:
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
public class Demo10_Join {
/**
* @param args
*/
public static void main(String[] args) {
final Thread t1 = new Thread() { // 错误: 从内部类中访问本地变量t1; 需要被声明为最终类型 t1前面加个final 声明称最终类型,就可以访问了
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();
}
}
复制代码
作者:
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