我已经阅读了有关 ThreadLocal 及其使用的以下 SO 线程的有趣讨论。
这个问题更倾向于设计时选择。我的场景是这样的
如果我在 Web 应用程序中有一个值对象,几乎所有步骤都可能需要在同一个线程中使用它。我可以想到两个界面设计选项,如下所示
方法#1使用方法参数传递。
到目前为止,我一直专注于提出一个接口,该接口可以具有带有值对象接口参数的方法。
例如:
public interface SomeDataProcessorInterface {
public void processSomething(SomeValueObjectInterface vo);
}
public interface SomeValueObjectInterface extends Serializable {}
Run Code Online (Sandbox Code Playgroud)
方法 #2使用 ThreadLocal
在这种方法中,我可以有一个没有方法参数的接口,只需创建一个静态类来使用线程本地访问我的值对象。
例如:
public interface SomeDataProcessorInterface {
public void processSomething();
}
public interface SomeValueObjectInterface extends Serializable {}
public Class StaticClass {
private static ThreadLocal<SomeValueObjectInterface> threadLocalVO = new ThreadLocal<SomeValueObjectInterface>();
public static ThreadLocal getThreadLocal() {
return threadLocal;
}
Run Code Online (Sandbox Code Playgroud)
哪种方法更好?为什么?
这些实现中的哪一个实现内存泄漏的可能性较小?
这些实现中的哪一个对 …
尝试从最新的稳定版本在Linux上安装cassandra - http://cassandra.apache.org/download/ - 1.2.6
我已经修改cassndra.yaml指向自定义目录而不是/ var,因为我没有对/ var的写访问权限
我在启动时看到这个错误.由于发布似乎相对较新,因此无法在谷歌上找到任何答案.只是将它发布在这里以防万一我身上有一个愚蠢的错误.
相同的分发文件在我的macos x86_64机器上运行正常.
INFO 19:24:35,513 Not using multi-threaded compaction
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:322)
at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:229)
at org.xerial.snappy.Snappy.<clinit>(Snappy.java:48)
at org.apache.cassandra.io.compress.SnappyCompressor.create(SnappyCompressor.java:45)
at org.apache.cassandra.io.compress.SnappyCompressor.isAvailable(SnappyCompressor.java:55)
at org.apache.cassandra.io.compress.SnappyCompressor.<clinit>(SnappyCompressor.java:37)
at org.apache.cassandra.config.CFMetaData.<clinit>(CFMetaData.java:82)
at org.apache.cassandra.config.KSMetaData.systemKeyspace(KSMetaData.java:81)
at org.apache.cassandra.config.DatabaseDescriptor.loadYaml(DatabaseDescriptor.java:468)
at org.apache.cassandra.config.DatabaseDescriptor.<clinit>(DatabaseDescriptor.java:123)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:211)
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:441)
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:484)
Caused by: java.lang.UnsatisfiedLinkError: /tmp/snappy-1.0.5-libsnappyjava.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /tmp/snappy-1.0.5-libsnappyjava.so)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(Unknown Source)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)