Hallo,
habe mal wieder ein neues Problem.
Ich möchte mit einer grafischen Oberfläche Informationen eines Objekts darstellen.
Dieses Objekt braucht aber sehr viele Daten, die gleichzeitig mit mehreren Threads aus der Datenbank geholt werden müssen.
Das Zugreifen auf 1 Objekt mit mehreren Threads habe ich in einer Beispielapplikation (siehe unten) schon hinbekommen.. doch sobald die Datenbank ins Spiel kommt, geht es nicht.
es kommen sehr merkwürdige Sql Fehler wie z.B
Der Sql Code ist aber ok.
hat jemand eine Idee warum es mit der Methode wie unten im Beispiel nicht funktioniert?
hat jemand eine andere Lösung um gleichzeitig Datenbankquerys durchzuführen?
Habe es auch schon mit Observerable und Observer versucht, doch da wird erst gar nicht auf das Notify reagiert.
habe mal wieder ein neues Problem.
Ich möchte mit einer grafischen Oberfläche Informationen eines Objekts darstellen.
Dieses Objekt braucht aber sehr viele Daten, die gleichzeitig mit mehreren Threads aus der Datenbank geholt werden müssen.
Das Zugreifen auf 1 Objekt mit mehreren Threads habe ich in einer Beispielapplikation (siehe unten) schon hinbekommen.. doch sobald die Datenbank ins Spiel kommt, geht es nicht.
es kommen sehr merkwürdige Sql Fehler wie z.B
Code:
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
hat jemand eine Idee warum es mit der Methode wie unten im Beispiel nicht funktioniert?
hat jemand eine andere Lösung um gleichzeitig Datenbankquerys durchzuführen?
Habe es auch schon mit Observerable und Observer versucht, doch da wird erst gar nicht auf das Notify reagiert.
Java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package threads;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
*/
public class Main {
/**
* @param args the command line arguments
*/
final Test test = new Test();
public Main(){
init();
}
private void init(){
// Reihenfolge 4,3,2,1
final Lock lock = new ReentrantLock();
final Condition test2Set = lock.newCondition();
final Condition test3Set = lock.newCondition();
Runnable r1 = new Runnable() {
public void run() {
lock.lock();
try{
test2Set.await();
test.setTest1();
}
catch(Exception e){
e.printStackTrace();
}
finally{
lock.unlock();
}
}
};
Runnable r2 = new Runnable() {
public void run() {
lock.lock();
try{
test3Set.await();
test.setTest2();
test2Set.signal();
}
catch(Exception e){
e.printStackTrace();
}
finally{
lock.unlock();
}
}
};
Runnable r3 = new Runnable() {
public void run() {
lock.lock();
try{
test.setTest4();
test.setTest3();
test3Set.signal();
}
catch(Exception e){
e.printStackTrace();
}
finally{
lock.unlock();
}
}
};
new Thread(r2).start();
new Thread(r1).start();
new Thread(r3).start();
}
public static void main(String[] args) {
new Main();
// TODO code application logic here
}
private class Test extends Object{
private String test1;
private String test2;
private String test3;
private String test4;
public Test(){
super();
}
void setTest1(){
try {
//Thread.sleep(42);
this.test1 = "Test1";
System.out.println("Thread : " + Thread.currentThread().getName() + " : " + test1);
} catch (Exception ex) {
ex.printStackTrace();
}
}
void setTest2(){
try {
//Thread.sleep(2000);
this.test2 = "Test2";
System.out.println("Thread : " + Thread.currentThread().getName() + " : " + test2);
} catch (Exception ex) {
ex.printStackTrace();
}
}
void setTest3(){
try {
//Thread.sleep(1);
this.test3 = "Test3";
System.out.println("Thread : " + Thread.currentThread().getName() + " : " + test3);
} catch (Exception ex) {
ex.printStackTrace();
}
}
void setTest4(){
try {
//Thread.sleep(40);
this.test4 = "Test4";
System.out.println("Thread : " + Thread.currentThread().getName() + " : " + test4);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}