Java - Thread.join()不释放锁

时间:2017-10-20 05:12:41

标签: java multithreading

我调试了这段代码,我不明白为什么会出现死锁。执行此代码时,它看起来像是join方法中的主线程锁,而另一个线程正在等待获取锁。

session_start();
if(isset($_POST)){ 
  $is_success = my_method_todo_some_task($_POST);
  if($is_success ){
      $_SESSION['added'] = 1;
      header('Location: my_website_page.php?id='.$my_var.'&added=1');
      exit;
  }else{
      $_SESSION['added'] = 0;
      header('Location: my_website_page.php?id='.$my_var.'&added=0');
      exit;
  }
}


if(!empty($_SESSION['added'])) {
  echo 'Your message here';
  unset($_SESSION['added']);
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

那是因为Thread.join()没有释放任何锁定。您设计了一个完美工作的死锁,其中Thread-1等待Thread-2Foo已锁定而死,而Thread-2正等待锁定{{1} }}

(从技术上讲,当前的实现确实发布了锁,因为它在Foo上同步时在内部使用wait()。但这是一个与用户代码无关的内部机制)