当第二个线程想要访问时立即停止线程

时间:2011-12-29 17:17:25

标签: java multithreading

“我有一个XYZ类,我已经编写了两个方法A和B,现在两个线程正在对这个类的对象进行操作,一个线程在A方法中,我希望第二个线程调用我的B方法,方法A中的线程应该立即停止并出来。有人会告诉我解决方案吗?“

1 个答案:

答案 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。 (或更糟)

简而言之,让一个线程杀死另一个线程是没有意义的,事实上你是如此努力以避免这种情况,因此以任何方式鼓励它都是坏主意。