2016-03-30 10 views
0

Ich bin sehr neu in Multithreading. Ich arbeite gerade an einem Projekt, das das Starten eines Threads erfordert, und benachrichtigt nach dem Abschluss den Thread, der es gestartet hat, und setzt seine Ausführung fort. Ich habe versucht, eine boolesche Variable zu verwenden und das System anzuweisen, einige Zeichenfolgen auszudrucken, um den Betriebsstatus anzuzeigen. Finden Sie den Code untenJava - benachrichtigen Sie einen äußeren Thread von einem inneren Thread

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(); 
     } 

Die zweite Methode soll den Anmeldern tun ist unten gezeigt

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

Es ist so viel falsch mit diesem Code. Zunächst einmal, wie viele 'MainForm'-Objekte erstellen Sie, und wie viele Ihrer Meinung nach ist es sinnvoll, sie zu erstellen? –

+0

@SebastianRedl ehrlich gesagt, 2 mainForm Objekte werden erstellt, wenn der Code ausgeführt wird. Ich werde mich später damit befassen. – charles

+0

Welches GUI Toolkit verwenden Sie? Die meisten von ihnen haben einen dedizierten GUI-Thread, der nicht blockiert werden sollte (gut - für lange Zeit). Außerdem haben die meisten GUI ToolKits eine Art Dialog-Funktionalität, die mit minimalem Konfigurationsaufwand einsatzbereit ist. Du solltest danach suchen. Wie Sebastian sagte, gibt es hier noch viele weitere Probleme ... – Fildor

Antwort

0

Try join() in Haupt-Thread zu bezeichnen, wie unten:

mainThread.join ()

wird es warten bis andere Threads finishe d, dann läuft der Haupt-Thread weiter.

Versuchen Sie jedoch, andere Multithreading-Technologie wie CountDownLatch, Barrier oder Cyclic zu verwenden.

Verwandte Themen