public class ThreadSafeDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
<strong><span style="color:#ff0000;">new ThreadSafeDemo()</span></strong>.init();
}
public void init(){
<span style="color:#ff0000;"><strong>final </strong></span>Outputer op = new Outputer();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
op.output("yinhang");
}
}
}).start();
new Thread(new Runnable(){
public void run(){
while(true){
op.output("zhuanzhang");
}
}
}).start();
}
class Outputer{
public void output(String name){
int len = name.length();
for(int i=0;i<len;i++){
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}
静态方法中不能new内部类!
solution:
1. new内部类时需要加final修饰(必须final!);
2. 写一个非静态方法!
3. new 外部类().非静态方法。
因为要想创建内部类的实例对象,必须要先有外部类的实例对象。
只有调用非静态方法时才会创建外部类对象,对吧!
局部内部类只能访问final局部变量!(考虑到局部内部类的生命周期)
不能不说这里设计的真是太太巧妙了!!