JDK1.8之后匿名内部类访问方法中的局部变量不用加final修饰
今天在学习ThreadLocal类,在一个方法中写了一个匿名内部类,然后使用方法中的局部变量,发现不用加final修饰变量,即可使用,百度了一下,原来是jdk1.8的新特性
附上代码,可以学习一下ThreadLocal
package cn.edou.thread;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
public class Demo1 {
@Test
public void fun1(){
ThreadLocal<String> tl = new ThreadLocal<String>();
tl.set("hello");
System.out.println(Thread.currentThread().getName());
new Thread(){
public void run() {
tl.set("world");
System.out.println(Thread.currentThread().getName());
System.out.println(tl.get());
}
}.start();
System.out.println(tl.get());
}
@Test
public void fun2(){
Map<Thread,String> map = new HashMap<Thread, String>();
map.put(Thread.currentThread(), "hello");
new Thread(){
public void run() {
System.out.println(map.get(Thread.currentThread()));
}
}.start();
System.out.println(map.get(Thread.currentThread()));
}
}
/* * ThreadLocal内部结构是Map */
class TL<T> {
private Map<Thread,T> map = new HashMap<Thread,T>();
public void set(T data){
map.put(Thread.currentThread(), data);
}
public T get(){
return map.get(Thread.currentThread());
}
public void remove(){
map.remove(Thread.currentThread());
}
}