线程中的死锁问题

时间:2018-01-20 22:00:39

标签: java multithreading locking deadlock

我有一个方法,它使用数字来查找是否为素数。我已经制作了10个线程,可以从柜台寻找一个数字,如果它是素数则打印。当我运行下面的代码时,程序打印似乎只有2和3的死锁。我是线程的新手,所以我很确定我做了一个愚蠢的错误。任何人都可以帮助我吗?

<button class="ql-align" value="center">

1 个答案:

答案 0 :(得分:3)

很少有事情需要注意:

  1. 您将lock声明为实例变量,而不是类变量(static)。结果,每个线程都有自己的副本,这违背了目的。

  2. 您不需要执行tryLock然后sleep - 只需调用.lock()即可让线程进入睡眠状态,直到锁定可用为止。或者,您可以使用AtomicInteger完全绕过使用锁定:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html

  3. (实际的错误)在你的主要检查器本身,你在1开始for循环:n % 1总是等于0,因为所有整数都是(通过可以被2整除的唯一原因是limit将等于1,因此for循环不会运行(正确的行为)。您应该从2开始i