s.kalyanasundaram
BAN USERIt will be a doubly linked list
- s.kalyanasundaram March 01, 2013interface TaskA {
public void execute();
}
class TaskA1 implements TaskA {
public void execute() { System.out.println("TaskA1"); }
}
class TaskA2 implements TaskA {
public void execute() { System.out.println("TaskA2"); }
}
interface TaskB {
public void execute();
}
class TaskB1 implements TaskB {
public void execute() { System.out.println("TaskB1"); }
}
class TaskB2 implements TaskB {
public void execute() { System.out.println("TaskB2"); }
}
class TaskManager {
private LinkedList<TaskA> taskAQ = new LinkedList<TaskA>();
private LinkedList<TaskB> taskBQ = new LinkedList<TaskB>();
boolean flag = true;
public synchronized void addTaskA(TaskA a) {
taskAQ.add(a);
notifyAll();
}
public synchronized void addTaskB(TaskB b) {
taskBQ.add(b);
notifyAll();
}
public synchronized void doTaskA() {
try {
while(taskAQ.size() == 0)
wait();
while(flag == false) //supposed to be taskb's turn
wait();
}catch(InterruptedException e) {}
TaskA a = taskAQ.poll();
a.execute();
flag = false;
notify();
}
public synchronized void doTaskB() {
try {
while(taskBQ.size() == 0)
wait();
while(flag == true)
wait();
}catch(InterruptedException e) {}
TaskB b = taskBQ.poll();
b.execute();
flag = true;
notify();
}
}
class ThreadA extends Thread {
private TaskManager tm;
public ThreadA (TaskManager t) { tm = t;}
public void run() {
while(true)
tm.doTaskA();
}
}
class ThreadB extends Thread {
private TaskManager tm;
public ThreadB (TaskManager t) { tm = t;}
public void run() {
while(true)
tm.doTaskB();
}
}
class ThreadP extends Thread {
private TaskManager tm;
public ThreadP(TaskManager t) { tm = t;}
public void run() {
TaskA a1 = new TaskA1();
TaskA a2 = new TaskA2();
TaskB b1 = new TaskB1();
TaskB b2 = new TaskB2();
tm.addTaskA(a1);
tm.addTaskA(a2);
tm.addTaskA(new TaskA() {
public void execute() { System.out.println("Anonymous TaskA3");}
});
tm.addTaskB(b1);
tm.addTaskB(b2);
tm.addTaskB(new TaskB() {
public void execute() { System.out.println("Anonymous TaskB3");}
});
}
}
public class test {
public static void main(String args[]) {
TaskManager tm = new TaskManager();
ThreadA a = new ThreadA(tm);
ThreadB b = new ThreadB(tm);
ThreadP p = new ThreadP(tm);
a.start();
b.start();
p.start();
}
}
this code replaces 003 to 000, but in the question its mentioned the pattern should be replaced with 00
- s.kalyanasundaram April 03, 2013