[英]Code with curly braces in/after “new”?
private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>() {
public Connection initialValue() {
return DriverManager.getConnection(DB_URL);
}
};
我不明白在星星内部发生了什么。 这是一种将方法插入 class 的方法吗?
ThreadLocal 的initialValue()方法只是构造一个持有除 null 以外的值的 ThreadLocal 的一种方法。
编辑:哦,我知道这不是你要问的。 您所拥有的与您所做的相同:
public class MyOwnThreadLocal extends ThreadLocal {
public Connection initialValue() {
return DriverManager.getConnection(DB_URL);
}
}
除了您的版本不需要完全独立的 class 定义 - 因此它被称为“匿名类”。
在星星中,您有一个匿名的内部 class 这意味着:
这是实现接口行为或抽象 class 的语法快捷方式,无需声明完整的标准 Java class。 您正在为固定上下文定义精确的行为。
接下来,对于 ThreadLocal 部分,基于ThreadLocal Javadoc ,connectionHolder 字段由许多头管理。
只要线程处于活动状态并且 ThreadLocal 实例可访问,每个线程都持有对其线程局部变量副本的隐式引用; 在线程消失后,它的所有线程本地实例副本都将受到垃圾回收(除非存在对这些副本的其他引用)。
如果您有 5 个线程可以访问 connectionHolder,您会发现 5 个 ThreadLocal 管理该值的 5 个实例
这是一个匿名内部 Class通常实现一些回调或类似的接口,Swing 将其用于侦听器。
在这种情况下,它在ThreadLocal<Connection>
的特定实例上实现initialValue()
方法。
您可以通过这种方式覆盖对象的单个实例上的方法,因此如果您只希望特定实例以不同的方式运行,您可以覆盖该实例上所需的任意数量的方法。
这是一个匿名的内部 class。 这是扩展基本 class 的简短语法:
class AnonClass extends ThreadLocal<Connector> {
public Connection initialValue() {
return DriverManager.getConnection(DB_URL);
}
}
private static AnonClass connectionHolder = new AnonClass();
您可以对接口做同样的事情(在实现回调时最常见)。 例如:
interface Callback {
void doIt();
}
Callback test = new Callback() { public void doIt() { /* ... */ } };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.