Semaphore

Used to only allow a fixed num of threads to access data or execute at the same time

// this needs to be defined in the runnable class
Semaphore semaphore = new Semaphore(numOfThreads);

semaphore.aquire()

semaphore.release()

Example

class ThreadName implements Runnable {
	Semaphore semaphore = new Semaphore(numOfThreads);

	@Override
	void run() {
		semaphore.aquire()
		// code stuff
		semaphore.release()
	}
}