i just did :) ill be using these on the new version of my app
thanks again
On Aug 21, 2011, at 12:34 PM, Felix Schumacher wrote:
> Am Sonntag, den 21.08.2011, 12:13 -0300 schrieb Alexis Fidalgo
> [voiceovernetinc]:
>> forget it, fixed. thanks again
> Even though. Have you had a look at the package java.util.concurrent? In
> there are blocking queues and executor services, like the one you are
> trying to write :)
>
> Regards
> Felix
>>
>>
>> On Aug 21, 2011, at 12:06 PM, alexis wrote:
>>
>>> better, concurrency issue is gone, facing a new one, i cannot stop the
>>> Consumer thread, i have this
>>>
>>>
>>> @Override
>>> public void run() {
>>>
>>> dao = (DAO) sc.getAttribute("dao");
>>> try {
>>> q = (Queue) sc.getAttribute("Queue");
>>>
>>> while (keepRunning) {
>>> Command c = q.get();
>>> doExec dE = new doExec(c);
>>> if (!dE.isAlive()) {
>>> dE.start();
>>> dE.join();
>>> }
>>> Thread.sleep(1500);
>>> }
>>>
>>> where keepRunning is a volatile boolean that i set to false when i try to
>>> end this Thread. so when i try to stop the consumer i call a method that
>>> sets the volatile to false, and then i call an interrupt. Resuming
>>>
>>> to start
>>>
>>> Consumer c = new Comsumer();
>>> if(!c.isAlive())
>>> c.start();
>>>
>>>
>>> to stop
>>>
>>> if(c.isAlive())
>>> {
>>> c.doStop(); //this turn keepRunning to false
>>> c.interrupt();
>>> while(c.isAlive())
>>> {
>>> log.info("Waiting for consumer to stop"); //now im facing a loop here,
>>> consumer never stops
>>> }
>>> }
>>>
>>>
>>> On Aug 21, 2011, at 11:49 AM, Felix Schumacher wrote:
>>>
>>>>
>>>>
>>>> alexis <[email protected]> schrieb:
>>>>
>>>>> I marked this issue OT because i think is a conceptual issue and not
>>>>> related to any application per se.
>>>>>
>>>>> I have 2 main issues with concurrency, one class is a queue
>>>>>
>>>>> public class Queue {
>>>>>
>>>>> private static org.apache.log4j.Logger log =
>>>>> Logger.getLogger(Queue.class);
>>>>> private Command command;
>>>>> private boolean valueSet = false;
>>>>>
>>>>> public synchronized void put(Command c) {
>>>>> if (valueSet) {
>>>> Try while instead of if.
>>>>> try {
>>>>> wait();
>>>>> } catch (InterruptedException ie) {
>>>>> }
>>>>> }
>>>>> this.command = c;
>>>>>
>>>>> log.info("put : "+c.getCommand());
>>>>> valueSet = true;
>>>>> notify();
>>>>> }
>>>>>
>>>>> public synchronized Command get() {
>>>>> if (!valueSet) {
>>>> Again, use while, not if.
>>>>> try {
>>>>> wait();
>>>>> } catch (InterruptedException ie) {
>>>>> }
>>>>> }
>>>>> valueSet = false;
>>>>> notify();
>>>>>
>>>>> log.info("get : "+this.command.getCommand());
>>>>> return command;
>>>>> }
>>>>> }
>>>>>
>>>>>
>>>> Regards
>>>> Felix
>>>>> Then i have 1 class that reads and execute the command property. only
>>>>> one. Also, i have n classes trying constantly to "put" commands in the
>>>>> queue. Usually it works ok, but i have situations like this
>>>>>
>>>>> [xcall3] 2011-08-21 11:04:00,589 INFO Queue:39 - get : list trunk
>>>>> [xcall3] 2011-08-21 11:04:00,589 INFO Queue:24 - put : list
>>>>> agent-loginID
>>>>> [xcall3] 2011-08-21 11:04:00,589 INFO Queue:24 - put : list bcms agent
>>>>> 5116 day
>>>>>
>>>>>
>>>>> list agent-loginID get lost and never is executed.
>>>>>
>>>>> all clases trying to put uses the same code
>>>>>
>>>>> new Producer(Queue q, Command c).start();
>>>>>
>>>>> and
>>>>>
>>>>> public class Producer extends Thread {
>>>>>
>>>>> private static org.apache.log4j.Logger log =
>>>>> Logger.getLogger(Producer.class);
>>>>> private Queue q;
>>>>> private Command c;
>>>>>
>>>>> public Producer(Queue q, Command c) {
>>>>> this.q = q;
>>>>> this.c = c;
>>>>> }
>>>>>
>>>>> @Override
>>>>> public void run() {
>>>>>
>>>>> try {
>>>>> while (true) {
>>>>> q.put(c);
>>>>> break;
>>>>> }
>>>>> } catch (Exception e) {
>>>>> log.error(c.getCommand());
>>>>> } finally {
>>>>> }
>>>>>
>>>>> }
>>>>> }
>>>>>
>>>>>
>>>>> The second issue is, when the webapp is running, beside this problem,
>>>>> everything goes ok, but when i call to stop the thread that "gets" from
>>>>> queue, the last command is executed once again. So, the Consumer class,
>>>>> reach a wait on get operation because there's no command to execute,
>>>>> but when i interrupt this consumer class, get returns the last command
>>>>> stored in the queue. a clue?
>>>>>
>>>>> Thanks in advance.
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]