Friday, 24 July 2015

My Blocking Queue using Lock interface

import java.util.*;
import java.util.concurrent.locks.*;

public class MyBlockingQueue {
private Queue items = new LinkedList<>();
private Lock lock = new ReentrantLock();
public void put(String item) {
try {
this.lock.lock();
System.out.println("Writing");
this.items.add(item);
}
finally {
this.lock.unlock();
System.out.println("Written");
}
}
public String get() {
try {
System.out.println("Reading");
this.tryLock();
return this.items.poll();
}
finally {
this.lock.unlock();
System.out.println("Read");
}
}
void tryLock() {
while(true) {
this.lock.lock();
if(this.items.size() == 0) {
this.lock.unlock();
sleep();
} else {
return;
}
}
}

private void sleep() {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
System.out.println("Interrupted");
}
}

}

No comments: