请教ThreadLocal

03-07-12 sprsong
    

各位大哥,我是一个只知道埋头设计自己代码疏于学习别人技术的笨家伙,今天来到这里忽然觉得打开了另一个世界的大门,非常感谢。

有一个问题,我一直希望可以在class里象jsp里访问session一样可以访问一些变量而不用在调用时传入,这些变量可以是每个客户访问不同的。例如纪录operator,以便在不同的地方log时不必再一层一层把operatorId传进去。看了一下帖子里提到ThreadLocal,我想这个东西可能是我需要的。我查了java API doc,看到一个例子,不是十分肯定。而且有一点不懂:

public class SerialNum {

// The next serial number to be assigned

private static int nextSerialNum = 0;

private static ThreadLocal serialNum = new ThreadLocal() {

protected synchronized Object initialValue() {

return new Integer(nextSerialNum++);

}

};

public static int get() {

return ((Integer) (serialNum.get())).intValue();

}

}

中的:

new ThreadLocal() {

protected synchronized Object initialValue() {

return new Integer(nextSerialNum++);

}

};

是什么意思?定义一个新类吗,明明只有一个函数initialValue(),为什么下面又调用get方法。看起来更象是继承,initialValue()更象是覆盖,是这样吗?

有ThreadLocal可以让我参考吗?

    

robbin
2003-07-12 21:24

这个例子不好,没有任何实际意义。看Hibernate的例子:

http://hibernate.bluemars.net/42.html

sprsong
2003-07-13 00:10

非常感谢,想澄清两个概念,在类里又调用别的类应该都是一个在Thread里,对吧,如果jsp执行结束,那么thread应该也结束。即使postback也不是同一个thread了,是这样吗?

sprsong
2003-07-13 00:13

一个jsp里调用分别调用的几个类也都是运行在一个thread里吧!

robbin
2003-07-13 00:14

应该说正确,如果不考虑线程池。

5Go 1 2 3 4 ... 5 下一页