线程返回并同步

时间:2019-02-06 17:05:20

标签: java multithreading javafx


我正在制作纸牌游戏应用程序。我有2个线程:
线程 curr =这里保存了当前线程(JavaFx线程)
线程 proHs =这是应用程序的大脑,通过接口运行方法
我想停止线程 proHs 一秒钟,直到选择两个按钮之一 mam nemam
然后,我必须返回 true false
感谢您的任何建议或建议。 谢谢!

我尝试了无限循环

public boolean biddingStep(int gt) //above this method is @Override, I can't post this with it
{
    System.out.println("  ");
    System.out.println("I HAVE OR NOT PART");
    try {
        proHs.wait();

    }
    catch (Exception e){
        System.out.print(e);
    }
    panelLicitace.setVisible(true);
    mam.setVisible(true);
    nemam.setVisible(true) ;//
    return false;//there would be the resolution of button "mam" or "nemam"


}


编辑#1
我想从你这里得到什么:

public boolean biddingStep(int gt) //above this method is @Override, I can't post this with it
{
    System.out.println("  ");
    System.out.println("I HAVE OR NOT PART");
    panelLicitace.setVisible(true);
    mam.setVisible(true);
    nemam.setVisible(true) ;//
    // HERE a code i want
    //1. stop proHS thread
    //2. loop program, wait for input from 2 buttons
    //3. return true or false


}

1 个答案:

答案 0 :(得分:2)

首先,您需要了解wait()是Object类的方法,因此就像特定线程正在等待与Object相关的某些操作一样。 因此,在这里,如果在proHs线程下调用 biddingStep(int gt),而您想停止proHs线程(基本上要等到选择了特定的按钮),则需要在某个对象上进行等待,通常,它应该是需要对其执行某些操作的对象。您需要在此处列出以下步骤:

  1. proHs对象参考。
  2. 锁定proHs对象。
  3. 致电proHs.wait()。

在第二个线程中,您将执行以下操作:  1.锁定buttonClickListener内的proHs对象
        第二个线程。)  2.调用proHs.notify()。

class InterfaceImpl {
    Thread proHs;
    boolean btnResponse;
   public boolean biddingStep(int gt) {
       System.out.println("  ");
       System.out.println("I HAVE OR NOT PART");
       panelLicitace.setVisible(true);
       mam.setVisible(true);
       nemam.setVisible(true) ;
       // HERE a code i want
       //1. stop proHS thread
       synchronized(proHs)
       {
         proHs.wait();
        //2. loop program, wait for input from 2 buttons
        //3. return true or false
           return btnResponse;
     }
  }   

  // This method should be called from another thread
  public boolean btnClickListener()
  { 
    btnResponse=true or false
      synchronized(proHs)
       {
         proHs.notify();
       }

   }
}

在此,应该在btnClickListener()之前调用biddingStep()方法,以便一旦线程等待,则另一个线程将通知它。