2Danke
ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
1189
1189
EMPFEHLEN
-
Hallo wissende!
habe ein kleines problem mit meinem ResourcePool der mit Semaphore einige probleme des multithreading lösen soll.
wie man sieht befindet der sich der Pool noch in der enwicklungsphase :PCode java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
import java.util.Stack; import java.util.concurrent.Semaphore; public class ResourcePool<T> { private int MAX_AVAILABLE; private Semaphore semaphore; private Stack<T> unused = new Stack<T>(); private Stack<T> used = new Stack<T>(); ResourcePool(Stack<T> stack) { unused = stack; used.clear(); MAX_AVAILABLE = unused.size(); semaphore = new Semaphore(MAX_AVAILABLE, false); } ResourcePool(Stack<T> stack, boolean fair) { unused = stack; used.clear(); MAX_AVAILABLE = unused.size(); semaphore = new Semaphore(MAX_AVAILABLE, fair); } public T acquire() throws InterruptedException { System.out.println(Thread.currentThread().getName()+" trying to get access"); semaphore.acquire(); System.out.println(Thread.currentThread().getName()+" access granted"); return get(); } protected synchronized T get() { T temp = unused.pop(); used.push(temp); return temp; } public void release(T item) { System.out.println(Thread.currentThread().getName()+" removing access"); set(item); semaphore.release(); } protected synchronized void set(T item) { used.remove(item); unused.push(item); } public void print() { System.out.println("pool inhalt:"); for (int i=0;i<unused.size();i++) System.out.println(unused.get(i)); } }
Nun zum problem:
nachdem releasen der variable "t" kann man trotzdem die resource noch manipulieren.Code java:
wie kann man das verhindern?
anregungen und kritik an der klasse ResourcePool sind erwünscht!
Danke!Geändert von syz (09.02.11 um 17:25 Uhr)
-
hat keiner eine idee?
-
09.02.11 09:28 #3
- Registriert seit
- Jun 2009
- Beiträge
- 868
Ich wüsste nicht, wie du das technisch realisieren kannst. In deinem Fall besteht das Problem aber nicht: Strings sind immutable, können also nicht geändert werden.
Falls du andere Objekte verwendest, schreib einfach in die JavaDoc, dass man die Elemente nicht verändern darf und hoffe darauf, dass die Nutzer sich daran halten.
Um die ursprünglichen Objekte zu schützen könntest du auch die Objekte nach dem releasen klonen und das geklonte Objekt zurückgeben. Damit wäre das ursprüngliche Objekt sicher vor Manipulation.Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Danke!
Ich glaube nicht das es so funktionieren wird.
Hab was interessantes gefunden: (Dynamische) Proxy:
http://www.gruntz.ch/courses/sem/ws0...oxyKlassen.pdf
http://www.dpunkt.de/java/Die_Sprach...t_Java/75.html
Meine das mein Info Dozent davon gesprochen hat, weis es aber nicht genau. Aufjedenfall fiel das wort "Proxy" in verbindung mit dem ResourcePool.
Werde mich mal in die Proxy geschichte reinknien.
Falls jemand mit diesen Proxy's bereits Erfahrung gemacht, bitte gebt euren Senf dazu******
-
09.02.11 17:45 #5
- Registriert seit
- Jun 2009
- Beiträge
- 868
Danke für die Links, genau das hab ich jetzt grad gebraucht
Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
Ähnliche Themen
-
synchronized run() synchronisiert nicht
Von Steve222 im Forum Java GrundlagenAntworten: 11Letzter Beitrag: 27.04.10, 02:22 -
Frage zu synchronized
Von M_Kay im Forum JavaAntworten: 9Letzter Beitrag: 10.07.09, 11:58 -
Schlüsselwort synchronized - 2 Varianten
Von Klein0r im Forum JavaAntworten: 1Letzter Beitrag: 08.05.08, 00:22 -
synchronized, wait, notify
Von PeteProgram im Forum JavaAntworten: 4Letzter Beitrag: 20.06.07, 12:37 -
static Methoden und synchronized
Von kleinis_1 im Forum JavaAntworten: 2Letzter Beitrag: 23.12.05, 14:30





Zitieren
Login





