草庐IT

thread-local

全部标签

java - Thread 在这里比 Executor 更受青睐吗?

据我了解,Executors有助于处理runnable的执行。例如。当我有几个工作线程完成它们的工作然后终止时,我会选择使用执行程序。执行者将处理创建和终止执行工作线程所需的线程。但是现在我面临着另一种情况。固定数量的类/对象应封装自己的线程。因此线程在创建这些对象时启动,线程将在这些对象的整个生命周期内继续运行。少数对象依次在程序开始时创建并在整个运行时存在。我想在这种情况下线程比执行器更可取,但是当我阅读互联网时,每个人似乎都建议在任何可能的情况下使用执行器而不是线程。有人可以告诉我这里是选择Executors还是Threads,为什么?谢谢 最佳答案

java - java 中的 volatile 与 threadLocal

让我们以SimpleDateFormat为例,因为它不是线程安全的。我可以像这样使用threadLocal允许每个线程拥有自己的SimpleDateFormat副本:privatestaticfinalThreadLocalformatter=newThreadLocal(){@OverrideprotectedSimpleDateFormatinitialValue(){returnnewSimpleDateFormat("yyyyMMddHHmm");}};但是volatile关键字保证线程将拥有变量的最新副本。所以我可以不这样做吗:volatileSimpleDateFormat

java - 我如何保证 Thread.sleep 至少 hibernate 那么长的时间?

根据thisquestion,Thread.sleep不一定保证在您指定的时间内hibernate:它可能更短或更长。如果您阅读Thread.sleep的文档,您会发现对于sleep的确切持续时间没有强有力的保证。它特别指出持续时间是subjecttotheprecisionandaccuracyofsystemtimersandschedulers这(有意)含糊但暗示不应过分依赖持续时间。特定操作系统上可能的hibernate持续时间的粒度由线程调度程序的中断周期决定。InWindows,thescheduler'sinterruptperiodisnormallyaround10o

java - Thread.yield() 之后线程的 Thread.State 是什么?

Thread.yield()之后线程的Thread.State是什么?它是Thread.State.WAITING吗?谢谢。 最佳答案 不,线程仍将在RUNNABLE中状态。请注意,RUNNABLE表示线程可以运行,并且可能正在运行或正在等待轮到它。Thread.STATE不区分当前正在执行的线程和准备运行的线程,它们都是RUNNABLE。一个线程只会进入WAITING调用wait()、join()或LockSupport.park()时的状态。调用Thread.yield()当前运行的线程自愿放弃其CPU时间片的方法。然后该线程从

java - Thread.join() 的 JDK 实现

我想知道Java是如何实现join()方法来等待线程完成的。根据sourcecode:publicfinalsynchronizedvoid[More...]join(longmillis)throwsInterruptedException{longbase=System.currentTimeMillis();longnow=0;if(millis调用线程在第1160行无限期地获取运行线程的监视器和wait(),同时运行线程仍然存在。我的问题是:当线程完成时,notify()或notifyAll()在哪里(以及谁调用),以便它唤醒调用线程?非常清楚,问题是关于在JDK/JVM中调用

Java : How to return intermediate results from a Thread

使用Java7我正在尝试构建一个监视数据存储(某种集合类型)的观察者,然后在某些时候从中返回某些项目。在这种情况下,它们是时间戳,当时间戳超过当前时间时,我希望它返回到起始线程。请看下面的代码。@Overridepublicvoidrun(){while(!data.isEmpty()){for(LocalTimedataTime:data){if(newLocalTime().isAfter(dataTime)){//returnaresultbutcontinuerunning}}}}我读过有关future和callables的内容,但它们似乎会在返回时停止线程。如果使用可调用,我

java - Thread.setName(name) 注意事项

我有一个使用套接字的多线程客户端服务器应用程序。当找到新的连接时,进一步的执行将转移到使用新的Executors线程池的新线程。我想在该客户端的所有日志语句中记录客户端ID。问题是我不想仅仅为了传递客户端ID而修改方法签名。我想到的解决方案是:使用ThreadLocal来保存客户端值。在run()中,我可以使用Thread.currentThread().setName(clientId);将客户端ID设置到线程中;第一个应该可以。但我喜欢第二种选择,因为一种。我可以从调试器中找到客户端IDb.记录器库可以配置为显示线程名称。因此不需要对日志语句进行任何更改,它也适用于库内的记录器。除

java - 将线程安全对象放在 ThreadLocal 上有什么好处吗?

我最近看到一段代码,它使用了一个ThreadLocal对象并在其中保存了一个ConcurrentHashMap。这有什么逻辑/好处,还是多余的? 最佳答案 如果对并发散列图的唯一引用驻留在ThreadLocal中,则散列图显然仅从单个线程引用。在这种情况下,我会说它是完全多余的。然而,不难想象有人与其他线程“共享”线程本地存储的HashMap:ThreadLocal>tl=...//...finalConcurrentHashMapprops=tl.get();EventQueue.invokeLater(newRunnable()

java - 在 Mac OS X 上使用 java 命令运行 DynamoDB Local

我正在尝试在MAC上本地运行DynamoDB。Amazonofficialblog说我必须下载jar文件并运行以下命令:$java–Djava.library.path=.-jarDynamoDBLocal.jar但我在MACOSX终端上收到以下错误:Error:Couldnotfindorloadmainclass–Djava.library.path=.哇?命令接缝无法识别-D参数。为什么?我也在Linux(Fedora)上工作,我从来没有遇到过任何问题。在MACOSX上,java-version给我javaversion"1.8.0_11"可能是什么问题?(我不太了解java命令

java - 从 Java 中的 Locale 获取语言的字母表

我正在用Java制作一个国际化的应用程序。我需要一个语言中所有字母的列表,从Locale开始。有一些问题,例如AlphabetconstantinJava?或CreateAlphabetListfromlist:Java这触及了这个问题,但我想知道是否有一个Utils类或它已经定义的东西,我在哪里可以得到一个字符列表或一个包含语言字母表中所有字母的字符串的区域设置。 最佳答案 详细可以引用这个库和方法,com.ibm.icu.util.LocaleData.将参数作为Locale.ENGLISH传递以获取英文字母表。