草庐IT

thread-local

全部标签

java - java线程间通信: stopping all threads when one finishes its task

我有n个线程并行运行,每个线程都执行一些自定义逻辑。但是,我的要求是,当任何一个线程完成执行时,所有其他线程都应该停止执行并返回。实现它的最佳方法是什么?我想通过共享boolean变量来做到这一点。当任何线程完成执行时,它将设置boolean值。所有线程都定期读取此变量并在设置时退出。此外,我的自定义逻辑是一个无限循环,一旦我知道某个其他线程已完成执行,我想在当前迭代后停止执行。这样做的正确方法是什么? 最佳答案 使用ExecutorService及其.invokeAny()方法(注:也有超时的版本)。来自Javadoc:Execu

java - 如何从字符串验证和实例化 Java Locale?

我的应用程序正在从外部进程中获取字符串,其中每个字符串的长度为2个或5个字符,代表一个java.util.Locale。例如:en-usko第一个示例是5个字符的字符串,其中“en”是ISO语言代码,“us”是ISO国家/地区代码。这应该对应于“en_US”区域设置。第二个例子只有一个2个字符的字符串,其中“ko”是ISO语言代码,应该对应于“ko_KR”(韩语)区域设置。我需要一种方法来获取这些字符串(2字符或5字符的变体),验证它(作为受支持的Java6Locale),然后用它创建一个Locale实例。我本来希望Locale带有这种开箱即用的验证,但不幸的是这段代码运行时没有抛出异

java - ThreadLocal单例

我在GlassFish上运行RESTfuljava后端。附加到它的是一个HTML5/JS前端,我可以将其放入webapp项目(然后将后端作为依赖项包括在内),或者在不同位置的IIS网络服务器上运行。CORS不是问题。无论解决以下问题:情况:User1登录并且数据库路径设置为“db/user1/”用户1将“值1”插入数据库User2登录并且数据库路径设置为“db/user2/”用户1尝试从数据库中删除“值1”User1将无法从db/user1中删除值1,因为数据库路径已更改为db/user2,并且该数据库中没有值1。publicclassDataAccess{privatestaticD

java - 替代 Thread.suspend() 和 .resume()

我有一大段代码不是循环,只是执行一次但需要一些时间的命令列表。我需要它根据不断变化的boolean值随时暂停或终止它。我可以使用不同的线程来挂起、恢复和停止此代码,但这些方法已被弃用,因此我想避免使用它们。我可以检查每一行代码之间的boolean值,但我希望有一个更优雅的解决方案。有什么好的方法吗? 最佳答案 Icouldcheckthebooleanbetweeneverylineofcode,butIamhopingforamoreelegantsolution.Isthereagoodwaytodothis?很遗憾,没有。要替

java - GWT、Google App Engine、TimerTask 或 ServiceImpl 中的 Thread 抛出异常

我正在使用GWT和GoogleAppEngine。我有一系列记录,我想每30分钟更新一次。在ServiceImpl中,我有以下代码:newTimer().schedule(newTimerTask(){@Overridepublicvoidrun(){try{Thread.sleep(30000);}catch(InterruptedExceptione){e.printStackTrace();}result=updateFeeds();}},30000,Long.MAX_VALUE);当我运行应用程序时,当我得到:com.google.gwt.user.server.rpc.Une

java - 多 :Threading - Is this the right approach?

专家-在以下情况下我需要一些建议。我有一个包含任务列表的配置文件。每个任务可以有零个、一个或多个依赖项。我想并行执行这些任务[现在它们正在按顺序执行]想法是有一个主程序来读取配置文件并加载所有任务。读取单个任务并将其交给将执行任务并在Future中返回结果的执行程序[callable]。当任务被提交给执行者(线程)时,它将监视其依赖项是否首先完成并执行自己的任务。这是正确的方法吗?使用Java1.5功能还有其他更好的方法吗? 最佳答案 听起来不错,但要注意线程饥饿死锁。基本上,不要使用有界线程池。这里有一个例子可以说明这个问题。ht

java - 从多个线程调用时 Thread.sleep() 如何工作

sleep()是Thread类的静态方法。从多个线程调用时它是如何工作的。以及它如何确定当前的执行线程。?或者可能是一个更通用的问题是如何从不同的线程调用静态方法?不会有任何并发​​问题吗? 最佳答案 howdoesitfigureoutthecurrentthreadofexecution?没必要。它只是调用操作系统,操作系统总是让调用它的线程hibernate。 关于java-从多个线程调用时Thread.sleep()如何工作,我们在StackOverflow上找到一个类似的问题:

java - ThreadLocal 与 Tomcat NIO Connector 一起使用是否安全

这只是在我的负载测试期间测试TomcatNIO连接器时想到的。我还使用了ThreadLocal,我还使用了Spring,我知道它在几个地方也使用了它。由于NIO连接器没有每个连接一个线程,我担心如果ThreadLocal对象在被清理之前与另一个线程共享,可能会导致很难找到错误。但是,我认为这不是问题,因为它不是我能找到的书面警告,我也没有找到任何其他关于此的警告帖子。我假设NIO连接器对服务于实际请求的线程没有影响。在我做出这个假设之前,我希望找到一些具体的证据。 最佳答案 只有熟悉Tomcat代码的人才能给你一个具体的答案,但我会

Java - 主方法中的 Thread.sleep

我正在审查Java代码,它本质上是一个定期移动/读取/解析一些文件并将数据输出到数据库的重复过程。重复部分(大致)如下完成:publicclassCollectorMain{publicstaticbooleansignalRecieved=false;publicstaticvoidmain(String[]args){Runtime.getRuntime().addShutdownHook(newThread(){publicvoidrun(){shutdown();}});while(!signalRecieved){Collector.execute();try{Thread.

java - 并行化 : What causes Java threads to block other than synchronization & I/O?

简短版本在标题中。长版:我正在研究一个使用Java进行科学优化的程序。程序的工作负载可以分为并行和串行阶段——并行阶段意味着正在执行高度并行化的工作。为了加速程序(它运行数小时/数天),我创建了多个线程,这些线程的数量等于我正在使用的机器上的CPU核心数量——通常是4或8个——并在它们之间分配工作。然后我启动这些线程并加入()它们,然后再进入串行阶段。到目前为止一切顺利。困扰我的是并行阶段的CPU利用率和加速比“理论最大值”还差得很远——例如如果我有4个内核,我希望看到350-400%的“利用率”(如top所报告),但它在180到310之间反弹。仅使用一个线程,我获得100%的CPU利