ThreadPool

Nuur

Mitglied
Hey,

habe mir ein ThreadPool selbst programmiert und hätte eine Frage bzgl. der Thread-safety. Also ich habe eine Queue, in der Aufgaben für die Threads enthalten sind. Die Queue ist eine ArrayBlockingQueue, also soweit ich das verstanden habe, Thread-safe. Wenn etwas entnommen werden soll vom Thread, aber nichts vorhanden ist, dann wartet der Thread bis eine neue Aufgabe eintrifft, und genauso, wenn eine Aufgabe hinzugefügt wird, aber die Queue schon voll ist.

Die Threads greifen so auf die Queue zu: Aufgabe aufgabe = queue.take();
Dann wird mit run() ausgeführt.

Jetzt ist meine Frage: Brauche ich ein synchronized, weil viele Threads gleichzeitig drauf zugreifen?
Ich hoffe es ist verständlich was ich meine und ich bin hier auch im richtigen Bereich.

MFG
Nuur
 

eRaaaa

Top Contributor
Für das queue.take nicht, wenn die Aufgaben alle von einander unabhängig sind vermutlich auch nicht, wenn doch, dann eben ja :)
 

Nuur

Mitglied
Das ist hier mal die run() von den Threads:
Java:
public void run() {
			while (true) {
				try {
					Task task = taskqueue.take()
				         task.run();		
				} catch (InterruptedException e) {
					System.out.println(e.getMessage());
					return;
				}
			}
		}

Erst einmal werden die Threads durch den HauptThread gestartet und dann fügt der HauptThread die Aufgaben der Queue hinzu.
Hoffe das reicht als Angabe

P.S: Die Aufgaben sind unterschiedlich. Also die run() in der Task hat den gleichen Aufbau, aber bei der Task Erstellung werden immer andere Werte der Task mitgegeben.
 
Zuletzt bearbeitet:


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Ähnliche Java Themen

Neue Themen


Oben