语境:
static ThreadLocal<MyType> threadLocalMyType = ...
Run Code Online (Sandbox Code Playgroud)
我想要的是说:
for (ThreadLocalEntry e: threadLocalMyType.getMapLikeThing() {
// Thread t = e.getKey();
// I don't need the thread value right now, but it might be useful for
// something else.
MyType theMyType = e.getValue();
// [...do something with theMyType...]
}
Run Code Online (Sandbox Code Playgroud) 当程序访问文件,使用system()等时,该程序的当前工作目录的物理知识/存储方式和位置是什么?从逻辑上讲,程序的工作目录类似于全局变量,理想情况下它应该是线程本地的,特别是在像D这样的语言中,默认情况下"全局"变量是线程局部的.是否可以使程序的当前工作目录成为本地线程?
注意:如果您不熟悉D,即使是与语言无关的答案也会有用.
具体来说,我在谈论Python.我试图通过查看对象的值而不传入它来破解某些东西(只是一点点),并且我想知道使用本地线程来执行该操作是否是线程安全的.另外,你甚至怎么做这样的事情?
由于每个编译器都有自己的线程本地存储版本,因此我最终为它创建了一个宏.现在唯一的问题是GCC(关闭了pthreads),它给了我:
"此目标不支持线程本地存储"
很公平,因为在这种情况下实际上关闭了pthreads.问题是,是否存在使用某些宏检测此问题的通用方法,例如#ifdef __GCC_XXX_NO_THREADS_XXX?
编辑:请参阅下面接受的答案.另外,这是我的懒惰解决方案:
$ touch test.c
$ gcc -E -dM test.c > out.1
$ gcc -pthread -E -dM test.c > out.2
$ diff out.*
28a29
> #define _REENTRANT 1
Run Code Online (Sandbox Code Playgroud)
这是在Mac OS X上.我不确定它是否可移植或任何东西......
有什么区别
request.getSession()
Run Code Online (Sandbox Code Playgroud)
和
getThreadLocalRequest().getSession()
Run Code Online (Sandbox Code Playgroud)
我维护的应用程序似乎使用第一个用于直接Servlets,第二个用于通过GWT-RPC实现的任何东西,GWT-RPC本身扩展了servlet.
C++ 11标准包含一个新的附加 - thread_local说明符 - 它使静态变量成为线程局部的.标准的thread_local支持非平凡类型 - 具有构造函数和析构函数的类型.不幸的是,GCC仅通过__thread作为扩展名提供的说明符来支持普通类型.有没有一种方法可以效仿thread_local之上__thread?实现__thread非常快(相当于常规变量加上两个间接),所以我想避免热路径中的库函数.
我正在使用GCC和Linux.不需要携带.
我一直在阅读有关threadlocal和有用的场景.我喜欢这个概念,但想知道它与克隆有什么不同?
因此,threadlocal将返回变量的新副本,这意味着我们不必使用同步.一个很好的例子是SimpleDateFormat对象,它不是线程安全的,而ThreadLocal提供了一种很好的使用方法.但为什么我们不能简单地创建一个新的varibale使用克隆副本?
与克隆相比,ThreadLocal类提供的增值是多少?
org.apache.catalina.core.ThreadLocalLeakPreventionListener的文档说"LifecycleListener在停止Context时触发Executor池中线程的更新,以避免线程本地相关的内存泄漏."
它是如何完全阻止ThreadLocal内存泄漏的?它是否在上下文停止时显式调用ThreadLocal的remove()方法?
据我所知,ThreadLocal是作为哈希映射实现的.映射键是对ThreadLocal实例本身的引用.映射值是线程本地值.
在Pharo中是否存在Java的ThreadLocals,或者实现类似行为的方法?例如,在Hibernate中,ThreadLocals用于通过单个getCurrentSession方法调用提供一个线程(当前请求/上下文)"作用域"统一工作实例 - 在Hibernate上命名为Session.开发人员不必担心,只需相信该方法将返回正确的工作单元.Pharo有可能吗?
我在Pharo Books(Pharo示例,Pharo企业和Deep Pharo)以及此页面中浏览了这个,但找不到有用的信息.
我有一个threadlocal对象,它使用非静态内部类的对象初始化,如下所示:
public class StressTestThreadLocal {
private final ThreadLocal<TObject> tObjectThreadLocal = ThreadLocal.withInitial(
() -> new TObject(1000));
private static ExecutorService executorService = Executors.newFixedThreadPool(4);
private void startThread() {
executorService.submit(tObjectThreadLocal::get);
}
public class TObject {
List<Integer> test;
TObject(int n) {
test = new ArrayList<>();
for (int i = 0; i < n; i++) {
test.add(i);
}
System.out.println("Done making TObject " + UUID.randomUUID());
}
}
public static void main(String[] args) {
for (int i = 0; i < 100000; i++) {
StressTestThreadLocal testThreadLocal = new …Run Code Online (Sandbox Code Playgroud) thread-local ×10
java ×5
c++ ×2
gcc ×2
c++11 ×1
d ×1
filesystems ×1
pharo ×1
portability ×1
python ×1
servlets ×1
session ×1
smalltalk ×1