“我有一个XYZ类,我已经编写了两个方法A和B,现在两个线程正在对这个类的对象进行操作,一个线程在A方法中,我希望第二个线程调用我的B方法,方法A中的线程应该立即停止并出来。有人会告诉我解决方案吗?“
答案 0 :(得分:2)
让我逐字地回答你的问题并告诉你为什么这是一个坏主意。
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。 (或更糟)
简而言之,让一个线程杀死另一个线程是没有意义的,事实上你是如此努力以避免这种情况,因此以任何方式鼓励它都是坏主意。