Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SharedBuffer {
- private int number;
- private boolean available = false;
- public synchronized void produce(int num) {
- try {
- while (available) {
- wait(); // Wait if consumer hasn't consumed previous number
- }
- number = num;
- System.out.println("Produced: " + number);
- available = true;
- notify(); // Notify the consumer
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- public synchronized void consume() {
- try {
- while (!available) {
- wait(); // Wait until a number is available
- }
- System.out.println("Consumed: " + number);
- available = false;
- notify(); // Notify the producer
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
- class Producer extends Thread {
- private final SharedBuffer buffer;
- public Producer(SharedBuffer buffer) {
- this.buffer = buffer;
- }
- public void run() {
- for (int i = 1; i <= 5; i++) {
- buffer.produce(i);
- try {
- Thread.sleep(500); // Simulate time to produce
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
- }
- class Consumer extends Thread {
- private final SharedBuffer buffer;
- public Consumer(SharedBuffer buffer) {
- this.buffer = buffer;
- }
- public void run() {
- for (int i = 1; i <= 5; i++) {
- buffer.consume();
- try {
- Thread.sleep(500); // Simulate time to consume
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
- }
- public class ProducerConsumerDemo {
- public static void main(String[] args) {
- SharedBuffer buffer = new SharedBuffer();
- Producer producer = new Producer(buffer);
- Consumer consumer = new Consumer(buffer);
- producer.start();
- consumer.start();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement