Untitled

mail@pastecode.io avatarunknown
java
23 days ago
1.4 kB
5
Indexable
Never
class Task {
	int taskNumber;
	LocalDateTime date;
}
class Producer implements Runnable {
	private List<Task> tasks;
	private ArrayBlockingQueue<Task> queue;
	public Producer(ArrayBlockingQueue<Task> queue) {
		this.queue = queue;
		// queue: [task]
	}

	@Override
	public void run() {
		// add 1000 tasks to the queue, later tasks will be processed by the consumer
		for(int i = 1; i <= 1000; i++) {
			Task task = new Task();
			task.taskNumber = i;
			this.queue.add(task);
		}
	}
}


class Consumer implements Runnable {
	static final int NUM_TASKS = 1000;
	private ArrayBlockingQueue<Task> queue;

	public Consumer(ArrayBlockingQueue<Task> queue) {
		this.queue = queue;
	}

	@Override
	public void run() {
		while (true) {
			int size = queue.size();
			// check if the size is greater than or equal to number of tasks, then proceed
			if (size >= NUM_TASKS) {
				while (!queue.isEmpty()) {
					Task task = queue.poll();
					System.out.println("task number: " + task.taskNumber);
				}
			}
		}
	}


	public static void main(String[] args) throws InterruptedException {
		ArrayBlockingQueue<Task> queue = new ArrayBlockingQueue<>(1001);
		Producer producer = new Producer(queue);
		Consumer consumer = new Consumer(queue);
		Thread producerThread = new Thread(producer);
		Thread consumerThread = new Thread(consumer);
		producerThread.start();
		consumerThread.start();
		producerThread.join();
		consumerThread.join();
	}
}