I am trying to send a notify to an available Thread (first Thread i
can find in a pool currently in a WAITING state), but am unable to. I
am trying to send the notify alert to a thread running in a separate
class, although this class is included in the same package. Here is
the Server.java file from which I am trying to notify my available
thread:

***************Server.java***********************
package dir.test;


import java.util.ArrayList;
import java.util.LinkedList;

public class Server {
        static private final int THREADCOUNT=5;


        public static void main(String[] args) throws InterruptedException {
                ArrayList<Thread> objThreads = new 
ArrayList<Thread>(THREADCOUNT);

                for (int i=0; i<THREADCOUNT; i++) {
                        objThreads.add(i, new Thread(new ObjThread(1)));
                        objThreads.get(i).start();
                }

                try {
                        for (int i=0; i<objThreads.size(); i++) {
                                if ( 
(objThreads.get(i).getState())==Thread.State.WAITING ) {
                                        System.out.println("Thread " + i + " is 
in state: WAITING.");
                                        objThreads.get(i).notify();
                                        System.out.println("Thread " + i + " 
has been notified.");
                                }
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                } catch (Throwable t) {
                        System.err.println("Caught throwable t: " + t);
                }
        }
}
**********************************************

and here's the ObjThread.java file...

***************ObjThread.java***********************
package dir.test;

import java.lang.Runnable;
import java.util.*;


public class ObjThread implements Runnable {
        private int int_var;

        public ObjThread(int int_var) {
                this.int_var = int_var;
        }

        public synchronized void run() {
                while ( true ) {
                        try {
                                System.out.println("test...before wait");
                                wait();
                                System.out.println("test...after wait.  int 
variable value: " +
int_var);
                        } catch ( InterruptedException e ) { }
                }
        }
}
**********************************************


The thread never gets to the statement:
System.out.println("test...after wait. int variable value: " +
int_var);

My output is:
$ java dir.test.Server
test...before wait
test...before wait
test...before wait
test...before wait
test...before wait
Thread 0 is in state: WAITING.
java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at cscie160.test.Server.main(Server.java:23)


Any idea how I can wake a thread from a WAITING state with this file
structure so it can resume it's work?

-- 
You received this message because you are subscribed to the Google
Groups "Java EE (J2EE) Programming with Passion!" group.
To post to this group, send email to
java-ee-j2ee-programming-with-passion@googlegroups.com
To unsubscribe from this group, send email to
java-ee-j2ee-programming-with-passion+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/java-ee-j2ee-programming-with-passion?hl=en?hl=en

Reply via email to