Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在多线程环境中模拟挂起线程?_Java_Multithreading_Concurrency - Fatal编程技术网

Java 如何在多线程环境中模拟挂起线程?

Java 如何在多线程环境中模拟挂起线程?,java,multithreading,concurrency,Java,Multithreading,Concurrency,我们有一个处理数百万条记录的Java多线程环境。在生产中,观察到一些线程被挂起,等待同步方法。。解决方法是通过删除对同步方法的依赖关系来提供的 但是,仍然无法在开发环境中复制这个问题,即多个线程挂起在一个同步方法上。在Dev中,每次尝试都会完成所有线程。有没有关于如何在Dev中复制该问题以对补丁进行单元测试的建议 经过进一步分析,似乎是饥饿。有没有关于如何在executor framework中模拟饥饿的指针?在您的开发环境中,因为您无法创建类似于生产的环境来重新创建需要在synchronize

我们有一个处理数百万条记录的Java多线程环境。在生产中,观察到一些线程被挂起,等待同步方法。。解决方法是通过删除对同步方法的依赖关系来提供的

但是,仍然无法在开发环境中复制这个问题,即多个线程挂起在一个同步方法上。在Dev中,每次尝试都会完成所有线程。有没有关于如何在Dev中复制该问题以对补丁进行单元测试的建议


经过进一步分析,似乎是饥饿。有没有关于如何在executor framework中模拟饥饿的指针?

在您的开发环境中,因为您无法创建类似于生产的环境来重新创建需要在synchronize块中引入长睡眠语句的bug,因此,其他线程必须等待一个线程完成该同步块。因此,只需在同步块中添加一个长睡眠语句,然后再试一次。

prod中的线程转储(jstack)。环境将有助于找到阻塞的原因(如果是活锁、死锁),然后信息将有助于复制。您能否提供更详细的信息,例如线程调用同步方法的代码和该方法的代码?我个人认为在这里模拟挂起的线程没有多大用处。您已经知道线程正在“等待一个同步的方法”,您需要做的是找到为什么它们不能进入同步的方法(在进入之前,同步的方法中总是有另一个线程?)。模拟方法中挂起的一个线程只会让其他线程等待进入该方法,没有学到任何东西。“在同步方法中总是有另一个线程才能进入?”对。。数千个线程正在运行,一些线程恰好缺少同步方法。。。活锁还是死锁??事实上,这更多的是饥饿。我们如何在executor框架中模拟饥饿。?感谢您的输入。有一个同步方法完成它的任务,所有线程等待轮到它们并在开发环境中完成。有没有其他建议强制线程等待同步方法呢?首先,按照我的想法睡个长觉。让我知道我会帮助你的。