====
package Demo11; /** * Title -- Advanced Java_ Multi-threading Part 9 - A Worked Example Using Low-Level Synchronization * * @author Dharmaraj.Net */ public class App { public static void main(String[] args) throws InterruptedException { final Processor processor = new Processor(); Thread t1 = new Thread(new Runnable() { public void run() { try { processor.producer(); } catch (InterruptedException e) { e.printStackTrace(); } } }); Thread t2 = new Thread(new Runnable() { public void run() { try { processor.consumer(); } catch (InterruptedException e) { e.printStackTrace(); } } }); t1.start(); t2.start(); t1.join(); t2.join(); } }
====
package Demo11; import java.util.LinkedList; import java.util.Random; public class Processor { private LinkedList<Integer> list = new LinkedList<Integer>(); private final int LIMIT = 10; private Object lock = new Object(); /** * This method is add items to the list * * @throws InterruptedException */ public void producer() throws InterruptedException { int value = 0; while (true) { synchronized (lock) { while (list.size() == LIMIT) { lock.wait(); } list.add(value++); lock.notify(); } } } /** * This method is remove items to the list * * @throws InterruptedException */ public void consumer() throws InterruptedException { Random random = new Random(); while (true) { synchronized (lock) { while (list.size() == 0) { lock.wait(); } System.out.println("List Size " + list.size()); int value = list.removeFirst(); System.out.println("Value is " + value); lock.notify(); } Thread.sleep(random.nextInt(1000)); } } }
No comments:
Post a Comment