收敛线程和线程优先级(java)

时间:2011-03-12 21:39:39

标签: java multithreading

让我假装我在程序中运行了两个线程。两个线程都到达一个节点(如树或地图中),用户必须在该节点中输入数据才能继续线程。通常,如果节点是同步的,那么首先到达该节点的线程将等待输入,同时阻止任何其他线程到达该节点。

问题是:

有没有办法通过让他超过1号线来容纳2号线(被锁定的那个人)?另外,是否可以在不导致线程1退出的情况下执行此操作?

我已经知道你可以有一个输入数据的时间限制,这样如果线程1在节点上停留的时间太长,那么线程1会被关闭但是可以让线程2“通过”可以这么说吗?

别介意别人,我想我弄明白了,我的问题很糟糕,但感谢您的努力。

3 个答案:

答案 0 :(得分:2)

如果我的问题正确,答案是java.util.concurrent.locks.Lock.tryLock()。只需使用它而不是synchronized关键字。

答案 1 :(得分:0)

为什么要锁定(同步)等待输入?

只有在实际修改多线程有权访问的内容时才应该锁定(同步)。

编辑:更清楚:线程#2应该等待的唯一原因是:

A)需要修改线程#1正在修改的内容。

B)它依赖于(需要阅读)线程#1正在修改的东西。

否则,您的锁定范围太宽。

答案 2 :(得分:0)

我不是如何编写代码的专家,但Java Concurrency In Practice涵盖了这个确切的场景以及如何使用java.util.concurrent中的类来构造它。这本书物有所值。

http://www.javaconcurrencyinpractice.com/