草庐IT

Multithreading

全部标签

java - CLR 是否执行 "lock elision"优化?如果不是,为什么不呢?

JVM执行一种称为锁省略的巧妙技巧,以避免锁定仅对一个线程可见的对象的成本。这里有一个很好的技巧描述:http://www.ibm.com/developerworks/java/library/j-jtp10185/.NetCLR是否做类似的事情?如果不是,那为什么不呢? 最佳答案 它很简洁,但它有用吗?我很难想出一个例子,编译器可以证明锁是线程本地的。默认情况下,几乎所有类都不使用锁定,当您选择一个锁定的类时,在大多数情况下,它将从某种静态变量中引用,无论如何都会阻碍编译器优化。另一件事是javavm在其证明中使用了逃逸分析。而

java - 是什么让线程的执行顺序不可预测?

是什么让线程的执行顺序不可预测?调度程序是否在某个时候使用随机数或检查系统资源或查看哪个线程已等待足够长的时间或......? 最佳答案 调度器通常是操作系统的调度器。它受到许多因素的影响,包括机器上的其他进程在做什么,硬件在做什么(中断)等。根据操作系统的不同,我想有时可能会涉及随机数,但我怀疑通常不会。它更像是多个可变时间间隔可以重叠的不可预测的方式。 关于java-是什么让线程的执行顺序不可预测?,我们在StackOverflow上找到一个类似的问题:

java - 这是 "better"。 AtomicIntegerArray(1/0 为真/假)与 AtomicBoolean[]?

我对此很好奇。如果使用值为0和1的AtomicIntegerArray,则可以完成与AtomicBoolean数组相同的操作。示例:finalAtomicIntegerArrayarray1=newAtomicIntegerArray(10);array1.compareAndSet(3,0,1);//0=falseand1=true//exactlythesamethingof:finalAtomicBoolean[]array2=newAtomicBoolean[10];for(inti=0;i你认为哪个更快更好? 最佳答案 W

java - 如何等待 Java 中的多个任务完成?

在Java应用程序中实现并发的正确方法是什么?我知道线程和其他东西,当然,我已经为Java编程10年了,但在并发方面没有太多经验。例如,我必须异步加载一些资源,只有在所有资源都加载完之后,我才能继续做更多的工作。不用说,没有命令他们将如何完成。我该怎么做?在JavaScript中,我喜欢使用jQuery.deferred基础结构,比如说$.when(deferred1,deferred2,deferred3...).done(function(){//hereeverythingisdone...});但是我在Java中做什么呢? 最佳答案

java - 需要帮助在线程运行方法中返回对象

我有一个扩展Thread的Java类,它基本上如下所示:publicclassHttpRequestDispatcherextendsThread{privateStringurl;privateStringmethod;//GETorPOSTprivatebyte[]postData;publicHttpRequestDispatcher(Stringurl,Stringmethod,byte[]postData){this.url=url;this.method=method;this.postData=postData;}publicHttpRequestDispatcher(S

java - 事件派发线程在哪里调用?

我读到所有构造Swing组件和处理事件的代码都必须由事件调度线程运行。我了解这是如何通过使用SwingUtilities.invokeLater()方法完成的。考虑以下代码,其中GUI初始化是在main方法本身中完成的publicclassGridBagLayoutTesterextendsJPanelimplementsActionListener{publicGridBagLayoutTester(){setLayout(newGridBagLayout());GridBagConstraintsgbc=newGridBagConstraints();JButtonbutton=n

java - 如何获取线程的堆栈跟踪

我有一个多线程应用程序。多条消息进入应用程序并在单独的线程中处理。为此,我使用了包java.util.concurrent中的类ThreadPoolExecutor和FutureTask。偶尔我会在应用程序中遇到一些死锁。发生死锁时,我想中断阻塞的线程,并记录该线程的堆栈跟踪,以便稍后解决死锁。有什么方法可以让我们在Java中找到该线程之外的线程的堆栈跟踪? 最佳答案 参见here了解如何生成堆栈跟踪,包括如何以编程方式执行此操作。在控制台中,Ctrl+Break会将堆栈跟踪转储到标准输出。另见thisSOquestion了解更多详

java - 您如何思考和预测这样的线程问题的输出?

我正在为SCJP做准备,而多线程一直是我最不稳定的领域,主要是因为我不知道如何查看多线程代码并遍历它。到目前为止,我的方法一直是用英语写下每个线程中可能发生的情况,并测试一些线程随机交叉的情况,这是一种非常偶然且耗时的方法。所以我想看看专业人士会怎么做。您是否愿意阅读下面的代码(这是给我带来麻烦的最新问题)并在计算可能的输出时写下您的想法(仅与代码相关的内容,请:)?问题附带的选择在最后。我正在寻找的不是我拥有的解决方案,而是一个人如何在考试中有效地得出解决方案。是的,我知道这个问题没有准确的答案,等等。接受的投票是最清晰和最容易模仿的答案,好的:)谢谢大家!问题:这些答案中哪些是可能

java - Spring Security 是如何跨 Web 应用请求在一个线程中管理 SecurityContext 的?

在SpringSecurity中,它有一个类名SecurityContextHolder及其规范:“将给定的SecurityContext与当前执行线程相关联。”对于Web应用程序,每当请求到达服务器时,Spring也会重新加载并在SecurityContextHolder中为其线程设置该请求的SecurityContext吗? 最佳答案 是的,SecurityContextPersistenceFilter照顾这个。默认情况下,它在HttpSession中定位SecurityContext,并通过SecurityContextHo

java - 如何从 ScheduledThreadPoolExecutor 中取消未决项目?

我有一个任务需要我安排任务并在特定事件发生时将其删除。我正在使用ScheduledThreadPoolExecutor来安排任务,这非常简单。但是,我找到了两种取消待定项目的方法,它们看起来都有点奇怪。我很好奇它们是否达到生产质量。如果两者都不是,那么您有什么建议?这是我所做工作的框架:privatefinalScheduledThreadPoolExecutorscheduler=newScheduledThreadPoolExecutor(1);publicvoiddoStuff(){//...scheduler.schedule(newRunnable(){/*...*/},10