Hej!
Mam problem z użyciem Listy w testach do zadania związanego z wielowątkowością.(docelowo w kodzie powinno być uzyte:BlockingQueue jednak w testach wymagana jest Lista).W jaki sposób rozwiązać ten problem?(Czy uzycie private static final AtomicInteger będzie rozwiązaniem?)
To kod:
public class Producer extends ThreadProducer implements Runnable {
private final BlockingQueue<Object> magazine;
Producer(BlockingQueue<Object> magazine) {
this.magazine = magazine;
}
public void run() {
try {
Object produce = getResource();
magazine.put(produce);
System.out.println("Resource(produced) of magazine is: " + magazine.size());
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
Object getResource() {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
return new Object();
}
.......................
public class Consumer extends ThreadProducer implements Runnable {
private final BlockingQueue<Object> magazine;
Consumer(BlockingQueue<Object> magazine) {
this.magazine = magazine;
}
public void run() {
try {
Object eats = magazine.take();
System.out.println("Resource(consumed) of magazine is:" + magazine.size());
take(eats);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
void take(Object obj) {
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
................................Testy.................
public class StockStatus {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
Thread consume = new Thread(new Consumer(magazine));
Thread produce = new Thread(new Producer(magazine));
executor.execute(consume);
executor.execute(produce);
executor.shutdown();
}
}