Verwenden Sie threads über ein RESTful-Web-Service in Java

Ich habe ein problem mit einem RESTful Web Service, ich habe einen client in php aufrufen, einen RESTful-Dienst in Java. In meinem RESTful-Dienst habe ich eine Post-Methode, die ausgeführt wird, eine update-Abfrage so ändern Sie alle Zeilen in einer Tabelle mit 10000 Datensätzen . Ich will zur Benutzung von threads, dies zu tun. Ist es möglich das zu tun?. Bitte helfen Sie mir, ich bin neu in Java. Danke.

OK ich mache das in meinem service-layer:

for(int i = 0; i < 10; i++)
{
    startRow = i*1000;
    finalRow = i*1000 + 1000;
    Runnable process = new ProcessRecords(startRow , finalRow);
    executor.execute(process);                    
}

//Wait until all threads are finish
while (!executor.isTerminated()) {

}
System.out.println("\n All threads finished");

Wird, und ich nenne diese Klasse (ProcessRecords) um das update auszuführen:

public ProcessRecords (int start, int final)
{
    startRow = start;
    finalRow = final;
}

@Override
public void run(){

    try {

        ConsultUniversity consult = new ConsultUniversity ();
        consult.averangeGrade(startRow, finalRow);

    } catch (Exception ex) {
        Logger.getLogger(Procesos.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Dann in meinem Daten-Schicht mache ich das in meiner Methode "averangeGrade":

 try {
        conn = UniversityConection();//This is my conection

        query = "SELECT * FROM grades LIMIT " + filaInicial + "," + filaFinal;            
        prepStatement = conn.prepareStatement(query);

        rs = prepStatement.executeQuery(query);  

        rsmd = rs.getMetaData();

        while(rs.next())
        {
            averange = (rs.getInt("nFirGrd") + rs.getInt("nSecGrd") + 
                               rs.getInt("nThrGrd"))/3; //the averange of three grades

            query = "UPDATE grades SET nFinGrd = ? WHERE cCodAlu = ?";

            prepStatement = conn.prepareStatement(query);
            prepStatement.setInt(1, averange);
            prepStatement.setString(2, rs.getString("cCodAlu"));

            prepStatement.executeUpdate();

            System.out.println("Record " + rs.getString("cCodAlu") + 
                                       " modified");
        }               

        conn.close(); //close connection    

    }

Dann wenn ich Sie ausführen, meine Kunden, mein Dienst wird das update für die top-Zeilen, 50 Zeilen, dann wieder die Meldung, wie wenn alle Prozesse fertig waren, und ich weiß nicht, warum. Ich denke, dass ist nicht zu warten, bis alle threads fertig sind, aber es ist der code für das, warum ist das passiert?. Bitte helfen Sie mir. Danke.

  • Können Sie das konkretisieren: (1) Was genau meinst du mit "use threads"? (2) welches problem versuchst du zu lösen?
  • Einfach mit einem Faden wird nicht erhöhen Sie die Geschwindigkeit Ihrer Datenbank. Wenn eine RESTful-Aufruf aktualisiert wird jede Zeile in einer Tabelle, vielleicht sollten Sie bei der Reorganisation Ihrer Daten, damit die Tabelle auf einen ausländischen Wert, der muss nur einmal geupdatet.
  • Gut, java-web-Container sind schon multi-threaded. Ich glaube, du bist wahrscheinlich auf der Suche für die Ausführung von asynchronen arbeiten zur Ausführung dieser großen update. Könnten Sie bitte klären, so können wir verstehen, Ihr problem besser?
  • Sie müssen zeigen, was Sie haben recherchiert und versucht, so weit, indem Sie Ihre codes. Jede Antwort auf Ihre aktuelle Frage wird nur mehr Fragen aufwerfen aus/für Sie.
  • Ich leg mehr Informationen in meiner Frage. Danke an Euch alle.
Schreibe einen Kommentar