jjzjj

deadlock

全部标签

java - Java 的可重入锁和死锁

有人可以用Java代码(伪)示例向我解释一下Reentrantlock和deadlock是如何相互关联的吗? 最佳答案 可重入锁定机制允许持有锁的线程重新进入临界区。这意味着您可以执行以下操作:publicsynchronizedvoidfunctionOne(){//dosomethingfunctionTwo();//dosomethingelse//redundant,butpermitted...synchronized(this){//domorestuff}}publicsynchronizedvoidfunctionT

Java等待()/加入(): Why does this not deadlock?

给定以下Java代码:publicclassTest{staticprivateclassMyThreadextendsThread{privatebooleanmustShutdown=false;@Overridepublicsynchronizedvoidrun(){//loopanddonothing,justwaituntilwemustshutdownwhile(!mustShutdown){try{wait();}catch(InterruptedExceptione){System.out.println("Exceptiononwait()");}}}publicsy

Java 线程和同步块(synchronized block)

假设我在某个线程中执行一个synchronized代码块,在synchronizedblock中我调用了一个方法来生成另一个线程来处理一个同步代码块这需要与第一种方法相同的锁。所以在伪Java代码中:publicvoidsomeMethod(){synchronized(lock_obj){//awholebunchofstuff...//thisisthelaststatementintheblock(newThread(someOtherMethod())).start();}//somemorecodethatdoesn'trequirealock}publicvoidsomeO

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

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

java - 混合使用 Log4j 和 commons-logging 会导致 "class loading deadlock"?

我想我发现了一种情况,其中log4ja)直接混合使用和b)通过commons-logging混合使用会导致某种类加载死锁。我不确定这种情况是否可能发生(JVM不应该检测到这种情况吗?)以及如何应对。问题在我们的构建系统中,我们目前正在按顺序运行我们的单元测试-为了加快构建速度,我们显然可以更改它以并行运行我们的单元测试。但是,如果我们这样做,某些构建会遇到执行超时。在分析此类“挂起构建”的线程转储时,我们发现自己处于不同的模块中,大部分时间涉及不同的测试。但它总是归结为两个尝试初始化Logger的线程:一个使用Logger.getLogger(直接使用log4j),另一个使用LogFa

Java ThreadPoolExecutor 在使用 ArrayBlockingQueue 时卡住

我正在开发一些应用程序并使用ThreadPoolExecutor来处理各种任务。ThreadPoolExecutor在一段时间后卡住。为了在更简单的环境中对此进行模拟,我编写了一个能够模拟该问题的简单代码。importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.RejectedExecutionHandler;importjava.util.concurrent.ThreadPoolExecutor;importjava.util.concurrent.TimeUnit;publicclassMy

java - Java 中的死锁 : When they occur?

我正在为J2ME开发一个应用程序,有时它完全卡住并且AMS需要相当长的时间来关闭它.在我看来,这像是一个死锁问题。你能告诉我什么会导致死锁吗?例如,如果对象调用其自身的另一个同步方法,调用对象的同步方法是否会导致死锁?谢谢!更新我说死锁应该发生在以下情况中是否正确:对象P调用对象A的同步方法,A调用对象B的同步方法,B调用对象的同步方法A对不起,如果我看起来很愚蠢,很可能是这样。但是这就是我问的原因。谢谢! 最佳答案 Would,forinstance,callingasynchronizedmethodofaobjectcause

c++ - 为什么我的程序会在拥有线程的情况下生成 LdrpLoaderLock 死锁?

我开发了一个我多年来一直致力于开发的C++应用程序。我们最近在我们的测试实验室中添加了大约4个处理器测试机。这样做之后,我们发现负载下的特定测试间歇性地导致LdrpLoaderLock死锁,拥有的线程不再运行。拥有的线程ID通常在数字上具有暗示性,因为从正在运行的线程推断出可能的线程ID,并且锁内存结构看起来没有损坏。我在调试器中没有遇到这个问题。我只能在它发生后才能看到它。我开始记录我正在创建的所有线程,但我没有在其中看到问题线程ID。但这可能没有意义,因为在发生死锁后,日志记录可能无法正常工作。我想我需要一种方法来跟踪线程创建和入口点,以便我可以找出哪个线程正在执行此操作。感谢您的

c++ - 线程构建 block : Deadlocks because all threads used up

在英特尔线程构建block框架中,如何确保所有线程不忙于等待其他线程完成。例如考虑以下代码,#include#include#include#include#includestd::futurerun_something(std::functionfunc,boolb){autotask=std::make_shared>(std::bind(func,b));std::futureres=task->get_future();tbb::task_groupg;g.run([task](){(*task)();});returnres;};intmain(){tbb::parallel

c++ - 为什么这种线程管理模式会导致死锁?

我正在使用一个公共(public)基类has_threads来管理应该允许实例化boost::thread的任何类型。has_threads的实例各自拥有一个set的thread(以支持waitAll和interruptAll函数,我不在下面包括),并且应该在线程终止时自动调用removeThread以维护此set的完整性。在我的程序中,我只有其中一个。每隔10秒创建一个线程,每个线程执行一次数据库查找。查找完成后,线程运行完成,应该调用removeThread;使用互斥锁集,线程对象从内部跟踪中删除。我可以看到这与输出ABC一起正常工作。不过,这些机制偶尔会发生冲突。removeTh