我有很多使用静态变量的线程,静态变量在同步块中延迟初始化。初始化是内存密集型的,因此理想情况下只希望执行一次。我知道线程访问自己缓存的静态变量副本,但在缓存之前需要一些时间,因此最初每个线程都进入初始化块。即使它是同步的,这也会导致内存不足错误。
有没有办法强制静态变量在第一个线程初始化后立即对所有新线程可用?
代码(简化):
class TestingThread extends Thread {
private static Templates transformTemplateRequest = null;
private static final Object lockObj = new Object();
private Document xslt;
public void run() {
//Document xslt initialized
Transformer requestTransformer = null;
synchronized (lockObj) {
if (transformTemplateRequest == null) {
TransformerFactory tf = TransformerFactory.newInstance();
Source xsltSource = new DOMSource(xslt);
transformTemplateRequest = tf.newTemplates(xsltSource);
}
}
requestTransformer = transformTemplateRequest.newTransformer();
//other work
}
}