2011-03-12 136 views
0

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

的问题是:

是否有通过让他闯过线程数1,以适应线程数两(家伙被锁定)的方法吗?此外,是否可以做到这一点,而不会导致线程1退出?

我已经知道你可以有一个输入数据的时间限制,以便线程1在节点上停留时间过长,但是是否有可能让线程2“通过”来说话?

别管家伙,我想我明白了,我说我的问题很差,但谢谢你的尝试。

+0

看来线程2 *需要*线程1正在等待的信息。那么如果没有这些信息,线程2 *如何继续? – ChrisJ 2011-03-12 21:51:43

回答

0

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

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

编辑:更清楚:唯一的原因,线#2要等的,如果:

A)它需要修改的东西,线#1被修改。 B)它依赖于(需要读取)线程#1正在修改的内容。

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

+0

对不起,我忘了提及输入实际上是写入文件。 – Alex 2011-03-12 21:52:53

+0

这是怎么改变的?线程#2应该被阻塞的唯一原因是如果它试图执行与线程#1相同的事情,或者需要读取线程#1正在修改的内容。 – 2011-03-12 21:53:51

+0

它是,他们都在阅读和修改相同的文件。 – Alex 2011-03-12 22:01:19

2

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

0

我不是如何对其进行编码的专家,但Java Concurrency In Practice涵盖了这个确切的场景以及如何使用java.util.concurrent中的类构造它。这本书非常值得。

http://www.javaconcurrencyinpractice.com/