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 
Nun zum problem:
nachdem releasen der variable "t" kann man trotzdem die resource noch manipulieren.
wie kann man das verhindern?
anregungen und kritik an der klasse ResourcePool sind erwünscht!
Danke!
habe ein kleines problem mit meinem ResourcePool der mit Semaphore einige probleme des multithreading lösen soll.
Java:
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:
Java:
Stack<String> stack = new Stack<String>();
stack.push("test1");
ResourcePool<String> pool = new ResourcePool<String>(stack);
String t = pool.acquire();
t = Thread.currentThread().getName()+" was here!";
pool.release(t);
wie kann man das verhindern?
anregungen und kritik an der klasse ResourcePool sind erwünscht!
Danke!
Zuletzt bearbeitet: