“我有一个XYZ类,我已经写了两个方法A和B,现在两个线程在这个类的一个对象上运行,一个线程在A方法中,我希望只要第二个线程调用我的B方法,方法A中的线程应立即停止并出来,有人告诉我这个解决方案吗?“立即停止线程作为第二个线程需要访问
回答
让我直接回答你的问题,并告诉你为什么它是一个坏主意。
private Thread lastThread;
public void transferMoney(Account account, Account account2, int amount) {
Thread t = lastThread;
if (t != null)
t.stop(); // so another thread running this immediately on a random line.
lastThread = Thread.currentThread();
// lastThread could die here
if (account1.withdrawn(amount)) { // the withdraw was successful
// lastThread could die here
account2.deposit(amount);
}
// lastThread could die here
lastThread = null;
}
该代码存在许多方面的缺陷,但是如果两个线程输入此方法,则第一个线程可能会停止。但是,它可能会使帐户1缺少未转移到帐户2的资金。 (或更糟糕的)
简而言之,让一个线程杀死另一个线程是没有意义的,事实上,您要尽量避免这种情况,所以以任何方式鼓励它都不是好主意。
pstt,你做了lastThread final。很确定你不是这个意思。 – Dunes 2011-12-29 17:45:02
@彼得这是你的实现..有可能我们需要这种情况。谢谢你的回复buddy – 2011-12-29 17:50:38
@peter我可以有你的电子邮件ID吗? – 2011-12-29 17:58:51
- 1. 立即停止线程
- 2. 多线程暂停第二个线程
- 3. Android - 为什么第二个线程停止执行第一个线程?
- 4. 用第二个线程停止主线程
- 5. 立即终止裸露线程而无需中止或暂停
- 6. Java多线程停止所有其他线程立即
- 7. 立即终止线程
- 8. 如何在python中完成第二个线程时停止第一个线程?
- 9. 主线程从第二个线程访问变量
- 10. 需要帮助来停止BackgroundWorker线程
- 11. 如果第二个线程等待第一个线程的终止,是否需要内存屏障?
- 12. 在Python 2.7中立即停止线程执行/终止
- 13. 即使使用ReentrantLock锁定第一个线程,也执行第二个线程
- 14. Android onPause:为什么要停止线程?
- 15. 在Java中立即终止线程
- 16. 如何立即终止Parallel.ForEach线程?
- 17. 立即中止剩余线程块
- 18. 停止线程
- 19. 停止线程
- 20. 停止线程
- 21. PHP线程停止工作
- 22. Android:线程停止工作
- 23. 线程停止工作
- 24. 停止线程不工作
- 25. 我在为多线程程序创建第二个线程时遇到问题
- 26. 如何在一段时间过后立即停止线程?
- 27. 如何在Java中立即停止线程
- 28. 每当发生异常时立即停止线程
- 29. 如何强制Jmeter服务器中的线程立即停止
- 30. 我可以立即停止运行.NET的线程:
所以你希望你的数据结构一旦出现竞态条件就会被破坏?哦,这很容易:删除所有的锁。更严重的是:你确实解决了错误的问题:更多的上下文。 – Voo 2011-12-29 17:24:10
我认为你没有得到我的观点我想在第二次尝试输入时立即停止第一个线程 – 2011-12-29 17:26:22
共享方法没有问题,因为它们没有改变(或者你没有看到它们改变;)问题只是共享可变数据。我不担心哪些线程在运行哪些方法,而是担心共享数据何时被更改。 – 2011-12-29 17:26:33