2016-03-30 2 views
0

Я очень новичок в многопоточности. В настоящее время я работаю над проектом, который требует, чтобы поток запускался и по завершении уведомлял поток, который его начал, и продолжить его выполнение. Я попытался использовать логическую переменную и поручить системе распечатать некоторые строки, чтобы указать этап операции. Найдите код нижеJava - уведомляет внешнюю нить из внутренней резьбы

public class BankDatabaseSQL { 
private Connection connection; 
private ResultSet resultSet; 

private static final String URL = "jdbc:mysql://localhost/banktesting"; 
private static final String USERNAME = "root"; 

Account account; 

public final Object monitor = new Object(); 

private PreparedStatement setBalance; 
private PreparedStatement getAccount; 
int numberOfRows; 

/** code omitted **/ 

/** 
    method in question 
*/ 
public synchronized boolean authenticatePrint(){ 

    try{ 
     MainForm mainForm = new MainForm(); 
     do{ 
     ExecutorService threadExecutor = Executors.newCachedThreadPool(); 
     mainForm.accNo = account.getAccountNumber(); 
     threadExecutor.execute(mainForm); 
     wait(); 
     }while(mainForm.verified = false); // while the verified variable of the mainForm object is set to false, 
              // the thread should keep waiting. The process has not gotten into this 
              // if statement. 
     if(mainForm.verified = true){ 

      System.out.println("time to notify"); 
      notify(); 
     } 

Второй метод должен сделать уведомляющее показан ниже

public class MainForm extends JFrame implements Runnable 
{ 
public void run() { 
     new MainForm(); 

} 
public synchronized void onVerify() { 
    VerificationForm form = new VerificationForm(this); 
    form.setVisible(true); 
      System.out.println("\nTime to onVerify"); 
      if(form.verificationStatus = true){ 
       verified = true; // variable for the mainForm object to aid in notifying the thread 
       System.out.println("\nVerified = true has been set!"); 

      } 

    } 
} 
+6

С этим кодом так много не прав. С самого начала, сколько объектов MainForm вы создаете и сколько, по вашему мнению, имеет смысл создавать? –

+0

@SebastianRedl честно, 2 объекта mainForm создаются при запуске кода. Я поговорю об этом позже. – charles

+0

Какой GUI Toolkit вы используете? Большинство из них имеют специальный GUI-Thread, который не должен блокироваться (хорошо - надолго). Кроме того, большинство GUI ToolKits имеют некоторую функциональность Dialog, которая готова к использованию с минимальными усилиями по настройке. Вы должны искать это. Как сказал Себастьян, здесь есть еще много вопросов ... – Fildor

ответ

0

Try позвонить join() в основном потоке, как показано ниже:

mainThread.join ()

он будет ждать, пока другие нити не закончатся d, то основной поток продолжает выполняться.

Но попробуйте использовать другую технологию многопоточности, например CountDownLatch, Barrier или Cyclic.

Смежные вопросы