Tawarien
Mitglied
Hey, danke für die Infos, aber das umgeschriebene Programm führt immer noch nicht zum richtigen Ergebnis.
Wünschenswert meinerseits wäre, dass die 3 Threads, die ich starte, auf eine gemeinsame Map zugreifen und mehr oder weniger nacheinander einen Eintrag der Map nehmen, ausgeben und löschen.
Momentan bewältigt allerdings immer nur Thread 1 oder Thread 2 diese Aufgabe, Aufgabenteilung findet - wie ich das sehen - nicht statt.
Dummerweise komm ich nicht dahinter, woran genau das liegt, hab schon mehere Dinge ausprobiert.
Danke fürs Helfen schonmal.
Hier nochmal der jetztige Code
Wünschenswert meinerseits wäre, dass die 3 Threads, die ich starte, auf eine gemeinsame Map zugreifen und mehr oder weniger nacheinander einen Eintrag der Map nehmen, ausgeben und löschen.
Momentan bewältigt allerdings immer nur Thread 1 oder Thread 2 diese Aufgabe, Aufgabenteilung findet - wie ich das sehen - nicht statt.
Dummerweise komm ich nicht dahinter, woran genau das liegt, hab schon mehere Dinge ausprobiert.
Danke fürs Helfen schonmal.
Hier nochmal der jetztige Code
Code:
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Test
{
public static void main( String[] args )
{
HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
int count = 100;
for(int i = 1; i <= count; i++)
hashMap.put(i, Integer.toString(i));
Map map = Collections.synchronizedMap(hashMap);
(new Testobject( 1, map )).start();
(new Testobject( 2, map )).start();
(new Testobject( 3, map )).start();
}
}
Java:
import java.util.Map;
class Testobject extends Thread
{
int num;
int i = 1;
Map map = null;
Testobject( int num, Map map)
{
this.num = num;
this.map = map;
}
@Override
public synchronized void run()
{
synchronized(map) {
while(!map.isEmpty()) {
if(map.get(i) != null) {
System.out.println("Thread " + num + ": " + map.get(i));
map.remove(i);
i++;
try { Thread.sleep( 100 ); } catch( InterruptedException ex ) {}
}
}
}
}
}