2016-03-04 33 views
0

我在执行线程时遇到问题。当我在执行另一个更新该对象的线程时,我从主线程中删除一个对象时发生问题。到第二个线程尝试更新对象的那一刻,并且由于对象不再存在而发生异常。我的问题如下:在运行我的特殊线程时,如何阻止其他线程修改我的对象?我希望我的特殊线程优先于应用程序中的其他每个线程。如何在执行线程时阻止对象更改

非常感谢您

+0

这听起来像你想要一个读写器锁 – SLaks

+0

你能提供一些代码示例在这里..它会更好地理解上下文 –

+2

建议你的工作方式Java并发教程:http://docs.oracle.com/javase/tutorial/essential/concurrency/ –

回答

-1

有你能达到这个多种方式:

(一)(在对象上使用同步块)的使用锁或同步的方式同步的删除和对象访问调用

(b)编辑:使用原子整数的初始值为1.将其标记为0,同时将其标记为-1,同时修改(完成时将标记重新标记为1),修改线程将在继续修改之前检查if (atomicCounter != 0)对象和删除线程将在删除前检查while (atomicCounter != -1)(即将等待becom e为)

(c)用类似相反闩倒计时(计数进位锁存器,它并不在Java库中存在)

(d)不要做任何事情,如果发生异常,处理得当使用catch和finally并让线程代码继续,因为你想成为

+1

你的建议(b)完全不起作用:如果线程A检查计数器并发现它等于1(可以继续),会发生什么情况。然后,线程B将计数器设置为0并删除该对象,然后线程A继续修改...? –

+0

谢谢..我编辑(b)使其工作。 –

+0

仍然不起作用。问题依然存在:两个并发线程都可以检查标志,都发现它等于1,并且两者都继续相互干扰。你的情况(b)在测试过程中不太可能发生问题,但它实际上并不能防止问题的发生。 –

相关问题