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()
}
}