message between threads

P

Pradyut

How do I send a message from Consumer to Producer when Consumer's i
reaches 50
The message should be displayed and notify should be stopped to do
further execution.

--------------------------------------------------------------------------------------------------------------------------------------
class Q {
int n;
int b;
boolean valueSet = false;

synchronized int get(int b) {
while(!valueSet)
try {
wait();
} catch(InterruptedException ie) {
System.out.println("Exception caught");
}
this. b = b;
System.out.println("got n : " + n);
System.out.println("got b : " + b);
valueSet = false;
notify();
return n;

}

synchronized void put(int n) {
while(valueSet)
try {
wait();
} catch(InterruptedException ie) {
System.out.println("Exception caught");
}
this.n = n;

valueSet = true;
System.out.println("Put: " + n);
notify();
}
}

class Producer implements Runnable {
Q q;
Producer(Q q) {
this.q = q;
new Thread(this, "Producer").start();
}
public void run() {
//throw new UnsupportedOperationException("Not supported
yet.");
int i = 0;
while(true) {
q.put(i++);
}
}

}

class Consumer implements Runnable {
Q q;
Consumer(Q q) {
this.q = q;
new Thread(this, "Consumer").start();
}
public void run() {
//throw new UnsupportedOperationException("Not supported
yet.");
int i=100;
while(true) {
q.get(i);
i = i-1;
}
}
}
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Q q = new Q();
new Producer(q);
new Consumer(q);
System.out.println("Press Control-c to stop");
}
}
--------------------------------------------------------------------------------------------------------------------------------------

Any help
Thanks
Pradyut
http://pradyut.tk
India
 
S

Szabolcs Ferenczi

How do I send a message from Consumer to Producer when Consumer's i
reaches 50
The message should be displayed and notify should be stopped to do
further execution.

Consumer's i is a private business of the Consumer, the Producer has
no information about it. All the Consumer can do is to check what it
receives and take an action accordingly. E.g. the Consumer can print a
message when it receives a special token.

Some notes about your example:

1) Usually the get method does not expect an argument

2) The return value of the get method must be taken by the consumer

3) Your program fragment has a termination problem

You can solve the termination problem in a number of ways, e.g. let
the Producer send certain number of items and let the Consumer consume
the same number of items. It works for one Producer and one Consumer
only.

Best Regards,
Szabolcs
 
R

Roedy Green

How do I send a message from Consumer to Producer when Consumer's i
reaches 50
The message should be displayed and notify should be stopped to do
further execution.

I would think the Consumer method where you register a new packet of
work to be done would simply reject the packet. The 50 criterion is
its own private business.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,058
Latest member
QQXCharlot

Latest Threads

Top