哪种方法更适合访问非线程安全对象?
使用ThreadLocal
对象:
static final ThreadLocal<NonThreadSafeParser> PARSER_THREAD_LOCAL = new ThreadLocal<NonThreadSafeParser>() {
@Override
protected NonThreadSafeParser initialValue() {
return new NonThreadSafeParser();
}
};
void parse(String input) {
PARSER_THREAD_LOCAL.get().parse(input);
}
使用并发对象池:
static final ConcurrentObjectPool<NonThreadSafeParser> PARSER_POOL = new ConcurrentObjectPool<>();
void parse(String input) {
NonThreadSafeParser parser = PARSER_POOL.borrow();
try {
parser.parse(input);
} finally {
PARSER_POOL.release(parser);
}
}
或您想提供的其他方法?
重要因素是:
- 表现
- 内存使用情况
- 垃圾收集
一般来说,每种方法的优缺点是什么?
它们之间有什么明显的区别吗?
谢谢。
编辑: