Implemented (successful) parallel lock-based Bellman-Ford by using specific threads instead of an ExecutorService; each thread repeatedly calls take() on the shared queue, until all threads are trying to take from an empty queue, at which point the last thread signals the main thread that BF is finished. To accomplish this, I modified the source code for the ArrayBlockingQueue - specifically, I added counters to the take() method to track how many threads are stuck trying to take() from an empty queue