j21


  1. Write a java program to accept ā€˜N’ Subject Names from a user store them into
    LinkedList Collection and Display them by using Iterator interface. [15 M]

import java.util.*;

public class SubjectNames {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
LinkedList<String> subjectList = new LinkedList<>();

    System.out.print("Enter the number of subjects (N): ");
    int N = scanner.nextInt();
    scanner.nextLine(); // Consume newline

    System.out.println("Enter the subject names:");
    for (int i = 0; i < N; i++) {
        String subject = scanner.nextLine();
        subjectList.add(subject);
    }

    System.out.println("Subjects entered:");
    Iterator<String> iterator = subjectList.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }

    scanner.close();
}

}

  1. Write a java program to solve producer consumer problem in which a producer
    produces a value and consumer consume the value before producer generate the next
    value. (Hint: use thread synchronization)
    import java.util.LinkedList;

class Buffer {
private LinkedList<Integer> queue = new LinkedList<>();
private final int CAPACITY = 1;

public void produce(int item) throws InterruptedException {
    synchronized (this) {
        while (queue.size() == CAPACITY) {
            wait();
        }

        System.out.println("Producer produced: " + item);
        queue.add(item);
        notify();
    }
}

public void consume() throws InterruptedException {
    synchronized (this) {
        while (queue.isEmpty()) {
            wait();
        }

        int consumedItem = queue.remove();
        System.out.println("Consumer consumed: " + consumedItem);
        notify();
    }
}

}

class Producer extends Thread {
private Buffer buffer;

public Producer(Buffer buffer) {
    this.buffer = buffer;
}

public void run() {
    try {
        int value = 0;
        while (true) {
            buffer.produce(value++);
            Thread.sleep(1000); // Simulating time taken to produce
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

}

class Consumer extends Thread {
private Buffer buffer;

public Consumer(Buffer buffer) {
    this.buffer = buffer;
}

public void run() {
    try {
        while (true) {
            buffer.consume();
            Thread.sleep(1000); // Simulating time taken to consume
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

}

public class ProducerConsumer {
public static void main(String[] args) {
Buffer buffer = new Buffer();
Producer producer = new Producer(buffer);
Consumer consumer = new Consumer(buffer);

    producer.start();
    consumer.start();
}

}