public class ThreadLocalGCDemo {
static volatile ThreadLocal<SimpleDateFormat> tl=new ThreadLocal<SimpleDateFormat>(){
protected void finalize() throws Throwable{
System.out.println(this.toString()+" is gc1");
}
};
static volatile CountDownLatch latch=new CountDownLatch(10000);
public static class ParseDate implements Runnable{
int i=0;
public ParseDate(int i){
this.i=i;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
if(tl.get()==null){
tl.set(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"){
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
System.out.println(this.toString()+" is gc2");
}
});
System.out.println(Thread.currentThread().getId()+":create SimpleDateFormat");
}
Date d=tl.get().parse("2015-03-29 19:29:"+i%60);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
latch.countDown();
}
}
}
}
这是一个类的代码 代码中两个this分别指代什么?为什么静态的内部匿名类里可以有this?
java 静态内部匿名类中为什么可以应用this关键字,且引用的this指代什么?
答案:2 悬赏:0 手机版
解决时间 2021-01-29 08:48
- 提问者网友:沉默的哀伤
- 2021-01-28 22:03
最佳答案
- 五星知识达人网友:野慌
- 2021-01-28 22:48
package TestUi;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CountDownLatch;
public class ThreadLocalGCDemo {
static volatile ThreadLocal<SimpleDateFormat> tl=new ThreadLocal<SimpleDateFormat>(){
protected void finalize() throws Throwable{
System.out.println(this.toString()+" is gc1");//这里指的就是这个类自身(static 关键字原理) 也可以写成 ThreadLocalGCDemo.toString()
}
};
static volatile CountDownLatch latch=new CountDownLatch(10000);
public static class ParseDate implements Runnable{
int i=0;
public ParseDate(int i){
this.i=i; //这里和上面的那个方法指代的有所不同,是实例化之后的这个类 ,ThreadLocalGCDemo cc = new ThreadLocalGCDemo 这个this 指的就是 cc 了 ,
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
if(tl.get()==null){
tl.set(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"){
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
System.out.println(this.toString()+" is gc2");
}
});
System.out.println(Thread.currentThread().getId()+":create SimpleDateFormat");
}
Date d=tl.get().parse("2015-03-29 19:29:"+i%60);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
latch.countDown();
}
}
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CountDownLatch;
public class ThreadLocalGCDemo {
static volatile ThreadLocal<SimpleDateFormat> tl=new ThreadLocal<SimpleDateFormat>(){
protected void finalize() throws Throwable{
System.out.println(this.toString()+" is gc1");//这里指的就是这个类自身(static 关键字原理) 也可以写成 ThreadLocalGCDemo.toString()
}
};
static volatile CountDownLatch latch=new CountDownLatch(10000);
public static class ParseDate implements Runnable{
int i=0;
public ParseDate(int i){
this.i=i; //这里和上面的那个方法指代的有所不同,是实例化之后的这个类 ,ThreadLocalGCDemo cc = new ThreadLocalGCDemo 这个this 指的就是 cc 了 ,
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
if(tl.get()==null){
tl.set(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"){
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
System.out.println(this.toString()+" is gc2");
}
});
System.out.println(Thread.currentThread().getId()+":create SimpleDateFormat");
}
Date d=tl.get().parse("2015-03-29 19:29:"+i%60);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
latch.countDown();
}
}
}
}
全部回答
- 1楼网友:有你哪都是故乡
- 2021-01-28 23:12
1、当在匿名类中用this时,这个this则指的是匿名类或内部类本身。
2、this.i=i 是指 当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量。(this是当前对象自己)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯