Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wenn ich mehrere Threads in meinem Programm erzeuge und diese no na gleichzeitig laufen, ist es dann der JVM möglich, diese Threads auf den zwei Prozessoren (bei Dual- Core) aufzuteilen oder konnen nur Prozesse auf die beiden Cores aufgeteilt werden
meine Begriffsbildung: ein Prozess hat mehrere Threads
und wer mapped das, ich nehme mal an die JVM, auf welchen Prozessen wird das gemapped, auf bestehende Prozesse oder werden neue Prozesse erzeugt.
Das erzeugen eines Prozesses ist ja 10-100 mal langsamer als das Erzeugen eines Threads.
ein Prozess ist das was zuerst entsteht (nur einmalig am Programmstart) ... danach werden nur noch Threads erzeugt ... das dumme ist das der erste Thread nach dem Erzeugen des Processes erzeugt werden ... über die 10 bis 100 mal lässt sich streiten ... ist mir aber Banane
Im Prinzip ists hier egal, weil man mit Java ja keine Prozesse, sondern nur Threads erzeugen kann. Aber hier gibts z. B. einen Vergleich zwischen Threads und Prozessen.
Ist durch Prozesswechsel zu begründen, das kostet einiges an Aufwand (kannst du ganz einfach recherchieren), wobei Threads in einem Prozess laufen und somit nicht durch Prozesswechsel gebremst werden.
Windows mapped deine Threads schon ohne zutun auf mehrere Prozessoren, schau dir deine javaw.exe im TaskManager an, Rechtsklick, Zugehörigkeit festlegen
Ist Sache des OS Wo man sowas unter Linux finden kann, kann ich dir nicht sagen, aber jedes OS hat das (DOS vllt nicht unbedingt^^)
ich hätte da noch eine konkrete Frage zu den Threads und zwar lese ich aus einer Datenbank aus und zeige dann die ausgelesenen Werte an (das geschieht in der unteren Methode), wenn ich jetzt sehr schnell auslese (alle 1s) dann werden in der unteren Methode so viele Threads erzeugt, dass ich ein Java Heap Memory OutOfMemoryException bekomme,
Ich vermute mal der GC kommt mit dem zerstören der Threads nicht mehr mit,
Was kann ich dagegen machen, wie schnell aus der DB ausgelesen werden soll, kann der User einstellen,
gibt es da eine bessere Lösung als den Wert nach unten zu beschränken?
Vielen Dank,
lg
Code:
public boolean getListAndDrawOnTracePanel(final TracePanelLineAttributes tracePanelLineAttributes) {
Thread thread = new Thread() {
@Override
public void run() {
writeBean = new DBWertWriteBean();
writeBean.setZeitstempel1(tracePanelLineAttributes.getFrom());
writeBean.setZeitstempel2(tracePanelLineAttributes.getUntil());
writeBean.setTabelle(tracePanelLineAttributes.getTableName());
List<DBWertReadBean> valueList = null;
try {
readFromDatabase = true;
valueList = (List<DBWertReadBean>) AppSQLConfig.getSqlMapInstance().queryForList("getValues", writeBean);
readFromDatabase = false;
System.out.println("Anzahl der Werte: " + tracePanelLineAttributes.getTableName() + "-> " + valueList.size());
}
catch (SQLException ex) {
System.out.println("Ausnahme in der Klasse TracePanelListReader in der Methode run: " + ex);
}
tracePanelLineAttributes.getTracePanel().createDatasetAndYAxis(tracePanelLineAttributes.getTableName(), "Einheit", valueList, tracePanelLineAttributes.getColor());
}
};
thread.start();
return true;
}
Ohne das genau durchdacht zu haben... Hilft Dir hier die concurrency-API weiter, genauer ThreadPoolExecutor. Ich darf erst seit kurzer Zeit Java 5, hab's also noch nicht selbst probiert...