Java Multi Thread problem.

Hi guys . . . i need so much help. i am trying to implement matrix multiplication using threads.
For some reason when iam multiplying the matrices i have the threads waiting too long.. they wait wait wait.. then do the job and then wait wait wait.
Here is the code for my thread pool class
package concurentNaive;
import java.util.*;
public class ThreadPool {
     protected Thread threads[] = null;     
     protected EndPool endPool = new EndPool();
     Collection jobs = new ArrayList(5);
     public PriorityQueue<MatrixJob> pq = new PriorityQueue<MatrixJob>();
     public ThreadPool(int size,PriorityQueue qu){
          this.pq = qu;
          threads = new worker[size];
          for (int i=0;i<threads.length;i++){
               threads[i] = new worker(this);
               threads.start();
     public synchronized void assign(Runnable r){
          endPool.workerBegin();
          jobs.add(r);
          System.out.println(Thread.currentThread());
          notify();
     * Get a new work
     * @return
     public synchronized Runnable getAssignement(){
          try {
               while ( !jobs.iterator().hasNext() )
                    wait(1);
                    System.out.print(Thread.currentThread());
               Runnable r = (Runnable)jobs.iterator().next();
               jobs.remove(r);
               return r;
               } catch (Exception e) {
                    endPool.workerEnd();
               return null;
     public void complete(){
          endPool.waitBegin();
          endPool.waitDone();
     protected void finalize(){
          endPool.reset();
          for (int i=0;i<threads.length;i++){
               threads[i].interrupt();
               endPool.workerBegin();
               threads[i].destroy();
     * Class for the pool component threads.The thread scans and executes tasks.
     * @author Krack
     class worker extends Thread{
          public boolean busy;
          public ThreadPool owner;
          worker(ThreadPool o){
               this.owner = o;
          public void run(){
               Runnable target = null;
               do {
                    target = owner.getAssignement();
                    if (target!=null) {
                    target.run();
                    owner.endPool.workerEnd();
                    } while (target!=null);
and here is my thread :
ublic class TheWorker implements Runnable{
          private int[] answer;
          private MatrixJob myJob;
          private long time1;
          public TheWorker(MatrixJob job){
           this.myJob = job;
           time1 = System.currentTimeMillis();
           public void run()
                //MatrixJob theJob = this.myJob;
                answer = new int[myJob.row.length];
                for (int i=0;i<myJob.row.length;++i){
                     for (int j=0;j<myJob.cols.length;++j){
                          answer=0;
                         for (int k=0;k<myJob.cols[j].length;k++){
                              answer[i] += myJob.row[i]*myJob.cols[j][k];
                    for(int i=0;i<answer.length;i++){
                         System.out.print(answer[i]+" ");
                    }     System.out.println();
          public int[] getAnswer() {
               return answer;
Any help is much appreciated. Thank you much.

How do you know that they are waiting?

Similar Messages

  • Java multi-thread Applet and Multi-processor

    Hello,
    I have a JAVA applet which work fine on a mono-processeur machine and not fine at all on multi-processors.
    It use multi thread (for reading on socket) and some times, request are lost.
    Is that a matter of programming or a JVM bug ?
    This happens on Linux and Windows NT bi-processors.
    We hare using JAVA 1.3.0_02
    Thanks for your help
    [email protected]

    I have already have a look to javax.swing.SwingUtilities.invokeLater() but (I think) it don't work for my need.
    A graphic applet which create 2 threads : one for reading and one for writing on a socket.
    Request sent to the server are memorized in a vector, and once answer is received, the request is remove from vector and treated. Access to the list is protected by synchronize.
    Everything works fine one several plateforme (linux, windows 98/2000/NT, Solaris). The only problem is on multi-processor : request are lost !

  • Running a Java Multi Thread Program in database

    I have created a multi threaded program in Java and it runs successfully from the command prompt. I want to create a DBMS Job which will wake up at regular intervals and runs the java program(Java stored procedure). Is this possible in 9.2/10G ?? If Yes, will there be any impact on the DB performance/increase memory etc.,
    The database (9.2...) resides on a RH 2.3 AS box.
    Any ideas...
    Thanks,
    Purush

    Purush,
    Java stored procedures cannot be multi-threaded. Well, they can, but the threads will not run in parallel. You may be able to find some more information in the Oracle documentation, which is available from:
    http://tahiti.oracle.com
    Good Luck,
    Avi.

  • Multi-Instrument + Multi-Thread problem found

    Right.....I have done a lot of research on why logic was not multi-threading correctly and have narrowed it down to one problem...using Kontakt as a multi instrument.
    My Mac is a 2 x 2.26 GHz Quad-Core Intel Xeon. This means that it is capable of distributing work loads over the multiple cores of the CPU to prevent core audio overloads from happening.
    If I run any plug ins in stereo or mono mode, the CPU acts as it should; I will load up a program, add processing and when the load is becoming a strain for the CPU, I use a bus send and work on that, then the workload is redistributed across more of the cores by logic, allowing me to continue working.
    However, I need to use Kontakt as a multi instrument. I usually have 3 instances of Kontakt open and on each one of these, I usually have a minimum of 10 outputs being sent to the aux channels of logic. Therefore using Kontakt as a stereo instrument is not an option, as I would have to open around 30 instances!
    Here is the problem; say for example, in Kontakt I send a kick drum out of Kontakt into AUX 3 + 4. The AUX channel in logic will being to show output. I can now EQ this single kick drum seperate from any other sound in logic.
    If I began to add processor heavy plug ins to this AUX output, rather than share the workload across the cores as it should and does with stereo instruments, logic now only uses a single core and it will core audio overload very quickly.
    As I said, this only happens when I set up Kontakt as a multi instrument. The main problem is when I begin to have many different outputs from my 3 instances of Kontakt, as by this stage, many different sounds will have processing. All 3 multi instruments and their processing are then controlled by the single processor and the other 7 are almost inactive! It therefore becomes impossible to use Kontakt and I have to switch to stereo instances. This happens for all multi-instruments not just Kontakt.
    I have just purchased Kontakt 4, I am upgrading to OSX 10.6 (Snow Leopard) and am updating Logic to v9.1. (From v9.0) Will this help at all? Is there an answer to this problem or will I just have to open 30 stereo and mono instances of Kontakt to continue working!
    I have included a link to a ZIP file with two photos of the problem. In the photo named MASSIVE. I have one instance of massive running as a stereo instrument. It is sent to a BUS where I applied the WAVES L316 Limiter. I did this multiple times and if you can see on the system performance (Top right) Logic is sharing the workload over the processors as it should.
    In the second picture named KONTAKT MULTI - I have done the same thing, but I have opened Kontakt as a multi instrument, sent a kick drum to AUX 2 and then forwarded this to a send where I applied the same WAVES L316. You can see on the system performance meter (Top Right) that Logic now does not re-distribute the workload, it is using one core and anymore plug ins applied to the AUX or bus channels relating to Kontakt will now make it core audio over load, even though now I am using far less processing.
    PHOTOS: http://www.sendspace.com/file/og8a94

    Ditto
    Using Pro 8 Studio, I had this problem after installing Snow Leopard.
    Invested £159 in Pro 9 update, same problem.
    This has stopped most of my work since my external WK4 sounds are superior to the included software sounds.
    As suggested, will now report since since it obviously seems to be a general problem.

  • Java Server Threading Problems

    Cross-posted at: http://www.java-forums.org/networking/41574-server-threading-confusion.html with no answers as of this edit.
    I'm very new to networking in java, and it's been a few months since I last did any major programming. I decided to try out networking, and I'm beginning to get a feel for it, but I've jumped in to trying to make a server for a multiplayer game, and I've gotten a bit stuck about how to do it, specifically on how to use threads to take care of my clients, and still be able to keep track of the threads so I can have the server send out info to them about where characters are, when the threads should close because someone wants to log out, etc.
    If anyone could help me out that would be awesome :D
    Here's some code:
    import java.net.*;
    import java.io.*;
    public class GameThread extends Thread // this is the actual thread class I made
      public Socket socket;
      public DataInputStream in;
      public DataOutputStream out; // a socket and two I/O streams for sending ints
      public GameThread(Socket socket) // typical constructor for getting socket
        try
          this.socket = socket;
          in = new DataInputStream(socket.getInputStream());
          out = new DataOutputStream(socket.getOutputStream());
        catch(Exception e)
          e.printStackTrace();
      public Socket getSocket() // I don't believe this is ever used. Ignore it.
        return socket;
      public void print() // Used to make sure the thread is active/knows about the socket
        System.out.println("GameThread says: " + socket);
      public void run()
        while(true)
    }Here's the class I use to manage the threads, or, at least, where I attempt to do so.
    import java.io.*;
    import java.util.ArrayList;
    import java.net.*;
    public class Threader
      public ArrayList clients;
      public ArrayList<GameThread> threads; // GameThread is the thread class above
      public Threader()
        threads = new ArrayList<GameThread>(); //constructor for this arraylist
      public void updateClientCount(ArrayList<Socket> clients) // this method works
        this.clients = clients; // it's not the problem.
      public void openThreads() //Here's probably where problems begin
        if(clients.size() > threads.size()) // this is to make the threads arraylist
          int f = clients.size()-threads.size();//equal length compared to clients arraylist
          while(f > 1)
         threads.add(null);
         f--;
        if(clients.size() < threads.size()) //same as above, just if threads is bigger
          threads.subList(clients.size(),(threads.size()-1)).clear();
        for(int h=0;h<clients.size();h++) //Here: for each client spot
          if(threads.get(h) == null) //Threads is tested in that spot to see if there's
          {              // A thread there
         GameThread gt = new GameThread((Socket)clients.get(h));
         threads.add(gt); //and if there isn't then it makes one
         gt.start(); // and starts it, but I guess this isn't happening as I want
          } // it to because in the method below none of the GameThreads print socket info
      public void print() //used to make sure the Threader/GameThread(s) is getting the info
        for(int y = 0;y<clients.size();y++)
          System.out.println("Threader says: " + clients.get(y));
        for(int x = 0;x<threads.size();x++)
          threads.get(x).print();
    }If anyone could help me find what is going on, or maybe (probably) I'm going about making a server wrong (I have another class with a serversocket and all, but I don't believe there are any bugs in it so it isn't included in here), so if I could get help that would be awesome.
    Thanks guys!
    Edited by: 848780 on Mar 30, 2011 8:55 PM
    Edited by: 848780 on Mar 30, 2011 11:55 PM

    Your thread management is back to front. All you need is a new thread per client, started every time you accept a new Socket. When you do that, if you want to manage them, enter the new thread into a collection, and when it exits remove it. But you normally don't need to keep track of client threads. You may want to keep track of client Sockets, in which case you should maintain a collection of Sockets on the same basis.

  • Multi-threading problem

    Hello everybody,
    I am having a problem using OCCI and threads.
    First I have Oracle RAC, I launched 5 threads from my application to do some query each thread has its own parameters to the same query but all are accessing the same table which is created with nolog option.
    The problem is the application always crashes whenever the threads are all at the same point of getting result set and specifcally at next() .
    I am suspecting that result set returned is null or paralle execution of the query has problem.
    P.S.: I have a connection pool which I use to get connection for each thread separately. The environment object is created with Object I tried to create the environment with Multithreaded_mutexed | object but it crashes while executing the app.
    Can anybody help ?

    Are you creating the environment as shown below?
    Environment *env = Environment::createEnvironment(Environment::Mode((Environment::OBJECT|Environment::THREADED_MUTEXED)));                                                                                                                                                                                                                                                                                                                                                       

  • Fix Multi thread problem

    Hi everyone
    I have a main program that tries to run two threads. here is the part of the main
    R_Thread rThread1 = new R_Thread(9);
    Thread t1 = new Thread(rThread1, "first");
    t1.start();
    R_Thread rThread2 = new R_Thread(8);
    Thread t2 = new Thread(rThread2, "second");
    t2.start();and here is my runnable:
    public class R_Thread implements Runnable {
         private int ID = -1;
         public R_Thread(int location){
             ID = location;
         public void run() {
              try {
                   while (true) {
                       dostuff();
                           Thread.sleep(5000);
              catch(InterruptedException e) {
                       System.out.println(e.toString());
        public void dostuff() {
    }as you can see i'm trying to run two threads but with different ID's. my program is supposed to read the data, process it and store it in DB. this works well but sometimes it misses to process the data. like it skips some data and continues with the other. my best guess is two threads are interfering with each other.
    i apologize for being vague but i don't know how else can i explain. Please feel free to ask any question, hopefully i can explain better. can anyone recommend me something to fix this?? thanks

    hey guys thanks for the input. i am trying to implement something different now.
         public class R_Thread implements Runnable {
              private int ID = -1;
              public R_Thread(int location){
                   ID = location;
              public void run() {
                   try {
                        while (true) {
                             if(Thread.currentThread().getName().equals("first")){
                                  dostuff();
                                  Thread.currentThread().wait();
                                  //notify to resume thread "second"
                             else if (Thread.currentThread().getName().equals("second")){
                                  dostuff();
                                  Thread.currentThread().wait();
                                  //notify to resume thread "first"                              
                   catch(InterruptedException e) {
                        System.out.println(e.toString());
              public void dostuff() {
         }how can i do this?? also i got this IllegalMonitorStateException error, how can make currentthread owner of the monitor?
    Edited by: d_khakh on Jun 4, 2009 2:33 PM

  • The problem about multi-thread in java application

    i have problem with the multi-thread in java application, i don't know how to stop and restart a thread safely, because the function thread.stop(),thread.suspend() are both deprecated.
    now what i can only do is making the thread check a flag(true or false) to determine whether to start or to stop, but i think this thread will always be in the memory and maybe it will lower the performance of the system, as the program i am developping is working under realtime enviorement.
    please help me about it. thanks !

    hi,
    you can stop a thread by exiting it's run()-method which in terms can be done by checking the interrupted-flag:
    public void run(){
    while(interrupted()){ //if the thread consists of a loop
    or
    public void run(){
    if(interrupted())return;
    if(interrupted())return;
    or by the use of the return-statement anywhere withing the run-method. Afterwards, that is when the thread is no longer needed, you clear all the references to the specific thread object by setting them to null:
    Thread t;
    ... //working
    t.interrupt(); //interrupting
    while(t.isAlive()){
    Thread.yield(); //wait till thread t has stopped
    t=null;
    best regards, Michael

  • Java Security Manager in Multi-threaded application

    I am writing a multi-threaded application listening (TCP and UDP) to several ports. To help implement certain security features (eg. refusing connections from certain ip address), I'm using the java.lang.SecurityManager (by subclassing it). I am having a few problems and queries and am hoping someone here can help me.
    1. As all the threads are calling the checkAccept(host, port) method. Is there a way to know which thread is currently accessing the security manager? For example if host A were to make 2 connections to the application, one to thread 1 (say listening to port 5001) and the other to to thread 2 (say listening to port 5002). I intend to refuse the connection to thread 2 but there is not way of differentiating the 2 connections since they are from the same host and there isnt any way of knowing their port number.
    2. Are calls to the Security Manager thread safe?
    I have been having this problem for a long time, would appreciate if someone can help point me to the right direction. cheers.

    1. As all the threads are calling the
    checkAccept(host, port) method. Is there a way to
    know which thread is currently accessing the security
    manager?Just use Thread.currentThread(). As specified in the Javadoc for e.g. SecurityManager.checkAccept().
    2. Are calls to the Security Manager thread safe? No.

  • PROBLEM OF MULTI-THREAD?????

    Hi I'm writing a program like Multi-tap (the text entry before T9 introduced) on mobilephone.
    I'm having problem with some of the KEYs. They do not work properly.
    As indicated in the code
    HERE HERE [3] suppose to function as space button....However whenever the key is pressed before the 'time out' (I use sceduler to implement the time out) it will print half of the previous character instead of space. this key is not related to the scheduler. so i suspect it is something related to multi-thread programming.
    HERE HERE [1] function as the caps lock. it can even show the indicator properly.... so i need to settle this b4 i continue.
    HEREHERE [2] function as clear button. it doest work too
    Someone please help me....
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    package textEntry;
    import javax.microedition.lcdui.game.GameCanvas;
    import javax.microedition.lcdui.Graphics;
    import javax.microedition.lcdui.*;
    import java.util.*;
    * @author Ed's
    public class MyCanvas extends GameCanvas {
        public static final String[] keys =
        {".?!,@`-_:;()&\'\"~10�$��+x*/\\|[]=<>#","abc", "def", "ghi", "jkl",
        "mno", "pqrs", "tuv", "wxyz"};
        public static final String[] capitalKey =
        {".?!,@`-_:;()&\'\"~10�$��+x*/\\|[]=<>#","ABC", "DEF", "GHI", "JKL",
        "MNO", "PQRS", "TUV", "WXYZ"};
        StringBuffer width = new StringBuffer();
        Timer keyTimer;
        textEntryMain main;
        public static char ch;
        public boolean keypress=false;
        public boolean capital;
        public boolean diffrentKey;
        String currentIndicator="abc";
        int countPress=0;
        //int previndex=0;
        public int counter=-1;
        int index=-1;
        int print=0;
        int white_space=6;
        public StringBuffer sms;
        int baseline=10;
        int y_axis=12;
        int line=1;
        char last;
        boolean dontPrint=true; //dont print if timer printed or it is at begining
        Font font;
        Graphics g;
        public long time;
        int poundHit=0;
        String justPressed;
        String prevPressed=null;
        char prevChar;
        //Sms class
        Form smsfrm;
        TextField smsField ;
        //Char Selection speed
        public boolean first;
        int selection_speed=1500;
        //font color (blue)
        public int red=0,green=0,blue=255;
        //Background color (white)
        public int back_red=250,back_green=250,back_blue=250;
        Form menu;
        public MyCanvas(textEntryMain main){
            super(false);
            first=true;
            this.main=main;
            sms=new StringBuffer();
            g=getGraphics();
            font=Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE);
            keyTimer = new Timer ();
            keyTimer.schedule (new task (this), selection_speed, selection_speed);
            drawIndicator(currentIndicator);
        public void drawIndicator(String indicator){
            Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_SMALL);
            Graphics g = getGraphics();
            g.setFont(f);
            int x= getWidth()-20;
            g.setColor(back_red,back_green,back_blue);
            g.fillRect(x,2,15,10);
            g.setColor(20,20,20);
            g.drawString(indicator, x, 2, g.TOP|g.LEFT);
        public void callPaint(char ch){
            drawIndicator(currentIndicator);
            Graphics g= getGraphics();
            g.setColor(back_red,back_green,back_blue);
            if(first){
                g.fillRect(0,0,getWidth(),getHeight());
                reset();
                redrawAll();
                first=false;
            //baseline -1 so that i can cover the pointer
            g.fillRect(baseline-1,y_axis,font.charWidth(this.last)+3,font.getHeight());
            g.setColor(red,green,blue);
            g.setFont(font);
            g.drawChar(ch,baseline,line*24,g.LEFT|g.BASELINE);
            flushGraphics();
        public void showPointer(){
            Graphics g = getGraphics();
            g.setColor(0,0,0);
            g.drawLine(baseline,y_axis,baseline,2*line*12);
            flushGraphics();
        //pointer appear //pointer disappear-use white line so that it cover the pointer line
        public void hidePointer(){
            Graphics g = getGraphics();
            g.setColor(back_red,back_green,back_blue);
            g.drawLine(baseline,y_axis,baseline,2*line*12);
            flushGraphics();
        //draw the selected
        public void ConfirmPaint(char ch){
            Graphics g = getGraphics();
            sms.append(ch);
            g.setColor(red,green,blue);
            g.setFont(font);
            g.drawChar(ch,baseline,line*24,g.LEFT|g.BASELINE); //draw the selected
            baseline+=font.charWidth(ch); // so that the nect letter won't be drawn on the same position
            if(baseline>getWidth()-30){     //move to the next line
                width.append((char)baseline);
                baseline=10;y_axis+=24;
                line+=1;
            flushGraphics();
        public synchronized void deleteChar(){
            if(sms.charAt(sms.length()-1)==' '){
                baseline-=white_space;
                Graphics g= getGraphics();
                g.setColor(back_red,back_green,back_blue);
                g.fillRect(baseline,y_axis,font.charWidth(sms.charAt(sms.length()-1))+2,font.getHeight());
                sms.deleteCharAt(sms.length()-1);
            else{
                baseline-=font.charWidth(sms.charAt(sms.length()-1));
                Graphics g= getGraphics();
                g.setColor(back_red,back_green,back_blue);
                g.fillRect(baseline,y_axis,font.charWidth(sms.charAt(sms.length()-1))+2,font.getHeight());
                sms.deleteCharAt(sms.length()-1);
            flushGraphics();
        public void redraw(char ch ){
            Graphics g= getGraphics();
            g.setColor(red,green,blue);
            g.setFont(font);
            g.drawChar(ch,baseline,line*24,g.LEFT|g.BASELINE);
            baseline+=font.charWidth(ch);
            if(baseline>getWidth()-30){
                width.append((char)baseline);
                baseline=10;y_axis+=24;
                line+=1;
            flushGraphics();
        public void reset(){
            if(width.length() >0)
            width.delete(0,width.length()-1);
            line=1;
            baseline=10;y_axis=12;
        public void redrawAll(){
            Graphics g=getGraphics();
            g.setColor(back_red,back_green,back_blue);
            g.fillRect(0,0,getWidth(),getHeight());
            reset();
            for(int a=0;a<sms.length();a++)
            redraw(sms.charAt(a));
        /*public synchronized void keyRepeated (int keyCode) {
            int one=1;
        /*    if(keyCode != KEY_POUND && keyCode != KEY_STAR){       
                ConfirmPaint((char)keyCode);
            if (keyCode == 1){
            ConfirmPaint((char)one);
        public synchronized void keyPressed (int keyCode) {
            justPressed=getKeyName(keyCode);
            time=System.currentTimeMillis(); // record the time when the keypress is pressed
            if(justPressed.equals("NUM0")){ //caps lock show indicator .............HERE HERE HERE HERE [1]
                if(poundHit == 0){
                    currentIndicator="ABC";
                    poundHit++;
                    drawIndicator(currentIndicator);
                    //set the string buffer to another one
                if(poundHit == 1){
                    currentIndicator="123";
                    poundHit++;
                    drawIndicator(currentIndicator);
                if(poundHit == 2){
                    currentIndicator="abc";
                    poundHit=0;
                    drawIndicator(currentIndicator);
            if(justPressed.equalsIgnoreCase("SEND")){ //send button allocated as clear button   ................. HERE HERE HERE [2]
                if(sms.length()>0){
                    hidePointer();
                    if(baseline<=10){
                        System.out.println(baseline);
                        line-=2;
                        baseline=(int)width.charAt(line);
                        line++;
                        y_axis-=24;
                    deleteChar();
            if(justPressed.equals("STAR")){//space  ........................................    HERE HERE HERE HERE HERE [3]
                    hidePointer();
                    sms.append(" ");
                    baseline+=white_space;
                    showPointer();
                    prevPressed=justPressed;
            else{
                if(justPressed.equals("NUM1")){index=0;}       
                if(justPressed.equals("NUM2")){index=1;}
                if(justPressed.equals("NUM3")){index=2;}       
                if(justPressed.equals("NUM4")){index=3;}       
                if(justPressed.equals("NUM5")){index=4;}
                if(justPressed.equals("NUM6")){index=5;}
                if(justPressed.equals("NUM7")){index=6;}
                if(justPressed.equals("NUM8")){index=7;}
                if(justPressed.equals("NUM9")){index=8;}
                if(index==0){
                    keypress=true;
                    if(justPressed.equalsIgnoreCase(prevPressed) || dontPrint){
                        if(dontPrint){countPress=35;}
                        if(countPress<34){
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        else{
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        dontPrint=false;
                    else{   //this is executed when the key is not repeated (prev!=)
                            ConfirmPaint(last);
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                    last=MyCanvas.ch;
                    prevPressed=justPressed;
                if(index==1 || index==2 || index == 3 || index == 4
                || index ==5 || index==7){
                    keypress=true;
                    if(justPressed.equalsIgnoreCase(prevPressed) || dontPrint){
                        if(dontPrint){countPress=4;}
                        if(countPress<3){
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        else{
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        dontPrint = false;
                    else{   //this is executed when the key is not repeated
                            ConfirmPaint(last);
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);                  
                            callPaint(MyCanvas.ch);
                            countPress++;
                    last=MyCanvas.ch;
                    prevPressed=justPressed;
                if(index==6 || index==8){
                    keypress=true;
                    if(justPressed.equalsIgnoreCase(prevPressed)|| dontPrint){
                        if(dontPrint){countPress=5;}
                        if(countPress<4){
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        else{
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        dontPrint=false;
                    else{   //this is executed when the key is not repeated
                            ConfirmPaint(last);
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                    last=MyCanvas.ch;
                    prevPressed=justPressed;
    /////////////task class for schedule on constructor
    class task extends TimerTask {
        public static boolean bool;
        MyCanvas canvas;
        public task (MyCanvas canvas) {
            this.canvas=canvas;
        public void run () {
            if(canvas.keypress){
                if(System.currentTimeMillis()-canvas.time>150){ //compare the time with the time out
                    canvas.ConfirmPaint(MyCanvas.ch);
                    canvas.counter=-1;
                    canvas.keypress=false;
                    canvas.dontPrint=true;
                    canvas.showPointer();
    }

    Hi I'm writing a program like Multi-tap (the text entry before T9 introduced) on mobilephone.
    I'm having problem with some of the KEYs. They do not work properly.
    As indicated in the code
    HERE HERE [3] suppose to function as space button....However whenever the key is pressed before the 'time out' (I use sceduler to implement the time out) it will print half of the previous character instead of space. this key is not related to the scheduler. so i suspect it is something related to multi-thread programming.
    HERE HERE [1] function as the caps lock. it can even show the indicator properly.... so i need to settle this b4 i continue.
    HEREHERE [2] function as clear button. it doest work too
    Someone please help me....
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    package textEntry;
    import javax.microedition.lcdui.game.GameCanvas;
    import javax.microedition.lcdui.Graphics;
    import javax.microedition.lcdui.*;
    import java.util.*;
    * @author Ed's
    public class MyCanvas extends GameCanvas {
        public static final String[] keys =
        {".?!,@`-_:;()&\'\"~10�$��+x*/\\|[]=<>#","abc", "def", "ghi", "jkl",
        "mno", "pqrs", "tuv", "wxyz"};
        public static final String[] capitalKey =
        {".?!,@`-_:;()&\'\"~10�$��+x*/\\|[]=<>#","ABC", "DEF", "GHI", "JKL",
        "MNO", "PQRS", "TUV", "WXYZ"};
        StringBuffer width = new StringBuffer();
        Timer keyTimer;
        textEntryMain main;
        public static char ch;
        public boolean keypress=false;
        public boolean capital;
        public boolean diffrentKey;
        String currentIndicator="abc";
        int countPress=0;
        //int previndex=0;
        public int counter=-1;
        int index=-1;
        int print=0;
        int white_space=6;
        public StringBuffer sms;
        int baseline=10;
        int y_axis=12;
        int line=1;
        char last;
        boolean dontPrint=true; //dont print if timer printed or it is at begining
        Font font;
        Graphics g;
        public long time;
        int poundHit=0;
        String justPressed;
        String prevPressed=null;
        char prevChar;
        //Sms class
        Form smsfrm;
        TextField smsField ;
        //Char Selection speed
        public boolean first;
        int selection_speed=1500;
        //font color (blue)
        public int red=0,green=0,blue=255;
        //Background color (white)
        public int back_red=250,back_green=250,back_blue=250;
        Form menu;
        public MyCanvas(textEntryMain main){
            super(false);
            first=true;
            this.main=main;
            sms=new StringBuffer();
            g=getGraphics();
            font=Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE);
            keyTimer = new Timer ();
            keyTimer.schedule (new task (this), selection_speed, selection_speed);
            drawIndicator(currentIndicator);
        public void drawIndicator(String indicator){
            Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_SMALL);
            Graphics g = getGraphics();
            g.setFont(f);
            int x= getWidth()-20;
            g.setColor(back_red,back_green,back_blue);
            g.fillRect(x,2,15,10);
            g.setColor(20,20,20);
            g.drawString(indicator, x, 2, g.TOP|g.LEFT);
        public void callPaint(char ch){
            drawIndicator(currentIndicator);
            Graphics g= getGraphics();
            g.setColor(back_red,back_green,back_blue);
            if(first){
                g.fillRect(0,0,getWidth(),getHeight());
                reset();
                redrawAll();
                first=false;
            //baseline -1 so that i can cover the pointer
            g.fillRect(baseline-1,y_axis,font.charWidth(this.last)+3,font.getHeight());
            g.setColor(red,green,blue);
            g.setFont(font);
            g.drawChar(ch,baseline,line*24,g.LEFT|g.BASELINE);
            flushGraphics();
        public void showPointer(){
            Graphics g = getGraphics();
            g.setColor(0,0,0);
            g.drawLine(baseline,y_axis,baseline,2*line*12);
            flushGraphics();
        //pointer appear //pointer disappear-use white line so that it cover the pointer line
        public void hidePointer(){
            Graphics g = getGraphics();
            g.setColor(back_red,back_green,back_blue);
            g.drawLine(baseline,y_axis,baseline,2*line*12);
            flushGraphics();
        //draw the selected
        public void ConfirmPaint(char ch){
            Graphics g = getGraphics();
            sms.append(ch);
            g.setColor(red,green,blue);
            g.setFont(font);
            g.drawChar(ch,baseline,line*24,g.LEFT|g.BASELINE); //draw the selected
            baseline+=font.charWidth(ch); // so that the nect letter won't be drawn on the same position
            if(baseline>getWidth()-30){     //move to the next line
                width.append((char)baseline);
                baseline=10;y_axis+=24;
                line+=1;
            flushGraphics();
        public synchronized void deleteChar(){
            if(sms.charAt(sms.length()-1)==' '){
                baseline-=white_space;
                Graphics g= getGraphics();
                g.setColor(back_red,back_green,back_blue);
                g.fillRect(baseline,y_axis,font.charWidth(sms.charAt(sms.length()-1))+2,font.getHeight());
                sms.deleteCharAt(sms.length()-1);
            else{
                baseline-=font.charWidth(sms.charAt(sms.length()-1));
                Graphics g= getGraphics();
                g.setColor(back_red,back_green,back_blue);
                g.fillRect(baseline,y_axis,font.charWidth(sms.charAt(sms.length()-1))+2,font.getHeight());
                sms.deleteCharAt(sms.length()-1);
            flushGraphics();
        public void redraw(char ch ){
            Graphics g= getGraphics();
            g.setColor(red,green,blue);
            g.setFont(font);
            g.drawChar(ch,baseline,line*24,g.LEFT|g.BASELINE);
            baseline+=font.charWidth(ch);
            if(baseline>getWidth()-30){
                width.append((char)baseline);
                baseline=10;y_axis+=24;
                line+=1;
            flushGraphics();
        public void reset(){
            if(width.length() >0)
            width.delete(0,width.length()-1);
            line=1;
            baseline=10;y_axis=12;
        public void redrawAll(){
            Graphics g=getGraphics();
            g.setColor(back_red,back_green,back_blue);
            g.fillRect(0,0,getWidth(),getHeight());
            reset();
            for(int a=0;a<sms.length();a++)
            redraw(sms.charAt(a));
        /*public synchronized void keyRepeated (int keyCode) {
            int one=1;
        /*    if(keyCode != KEY_POUND && keyCode != KEY_STAR){       
                ConfirmPaint((char)keyCode);
            if (keyCode == 1){
            ConfirmPaint((char)one);
        public synchronized void keyPressed (int keyCode) {
            justPressed=getKeyName(keyCode);
            time=System.currentTimeMillis(); // record the time when the keypress is pressed
            if(justPressed.equals("NUM0")){ //caps lock show indicator .............HERE HERE HERE HERE [1]
                if(poundHit == 0){
                    currentIndicator="ABC";
                    poundHit++;
                    drawIndicator(currentIndicator);
                    //set the string buffer to another one
                if(poundHit == 1){
                    currentIndicator="123";
                    poundHit++;
                    drawIndicator(currentIndicator);
                if(poundHit == 2){
                    currentIndicator="abc";
                    poundHit=0;
                    drawIndicator(currentIndicator);
            if(justPressed.equalsIgnoreCase("SEND")){ //send button allocated as clear button   ................. HERE HERE HERE [2]
                if(sms.length()>0){
                    hidePointer();
                    if(baseline<=10){
                        System.out.println(baseline);
                        line-=2;
                        baseline=(int)width.charAt(line);
                        line++;
                        y_axis-=24;
                    deleteChar();
            if(justPressed.equals("STAR")){//space  ........................................    HERE HERE HERE HERE HERE [3]
                    hidePointer();
                    sms.append(" ");
                    baseline+=white_space;
                    showPointer();
                    prevPressed=justPressed;
            else{
                if(justPressed.equals("NUM1")){index=0;}       
                if(justPressed.equals("NUM2")){index=1;}
                if(justPressed.equals("NUM3")){index=2;}       
                if(justPressed.equals("NUM4")){index=3;}       
                if(justPressed.equals("NUM5")){index=4;}
                if(justPressed.equals("NUM6")){index=5;}
                if(justPressed.equals("NUM7")){index=6;}
                if(justPressed.equals("NUM8")){index=7;}
                if(justPressed.equals("NUM9")){index=8;}
                if(index==0){
                    keypress=true;
                    if(justPressed.equalsIgnoreCase(prevPressed) || dontPrint){
                        if(dontPrint){countPress=35;}
                        if(countPress<34){
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        else{
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        dontPrint=false;
                    else{   //this is executed when the key is not repeated (prev!=)
                            ConfirmPaint(last);
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                    last=MyCanvas.ch;
                    prevPressed=justPressed;
                if(index==1 || index==2 || index == 3 || index == 4
                || index ==5 || index==7){
                    keypress=true;
                    if(justPressed.equalsIgnoreCase(prevPressed) || dontPrint){
                        if(dontPrint){countPress=4;}
                        if(countPress<3){
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        else{
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        dontPrint = false;
                    else{   //this is executed when the key is not repeated
                            ConfirmPaint(last);
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);                  
                            callPaint(MyCanvas.ch);
                            countPress++;
                    last=MyCanvas.ch;
                    prevPressed=justPressed;
                if(index==6 || index==8){
                    keypress=true;
                    if(justPressed.equalsIgnoreCase(prevPressed)|| dontPrint){
                        if(dontPrint){countPress=5;}
                        if(countPress<4){
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        else{
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                        dontPrint=false;
                    else{   //this is executed when the key is not repeated
                            ConfirmPaint(last);
                            countPress=0;  
                            MyCanvas.ch=keys[index].charAt(countPress);
                            callPaint(MyCanvas.ch);
                            countPress++;
                    last=MyCanvas.ch;
                    prevPressed=justPressed;
    /////////////task class for schedule on constructor
    class task extends TimerTask {
        public static boolean bool;
        MyCanvas canvas;
        public task (MyCanvas canvas) {
            this.canvas=canvas;
        public void run () {
            if(canvas.keypress){
                if(System.currentTimeMillis()-canvas.time>150){ //compare the time with the time out
                    canvas.ConfirmPaint(MyCanvas.ch);
                    canvas.counter=-1;
                    canvas.keypress=false;
                    canvas.dontPrint=true;
                    canvas.showPointer();
    }

  • Cannot get bitmap from native DLL from multi threaded Java app.

    I have a native DLL that gives me a HBITMAP (Windows handle to bitmap). I have made a JNI wrapper for this that gives me a BufferedImage back. The native code simple gets the actual bitmap for the handle, converts the RGB byte triplets to RGB ints, puts this in a jintArray and creates a BufferedImage.
    This all works fine within a single Java thread. If I do this multi threaded (thread 1 calls the native function and several seconds later, thread 2 calls the native function) I keep getting the last image of the first thread. Can enyone help me out?
    I know that this is probably a question for MSDN but I just know that they will tell me its a JNI question.
    The native code:
    JNIEXPORT jobject JNICALL Java_somenamespace_getPicture
    (JNIEnv *env, jclass cl, jstring serialNumber)
    jobject jImage;
    jclass jImageClass;
    jmethodID jMethod;
    jfieldID jField;
    jintArray rgbArray;
    char *str;
    char *charArray;
    int *intArray;
    int w, h, index, type;
    HBITMAP hbmp;
    BITMAP bmp;
    str = (char*)((*env)->GetStringUTFChars(env, serialNumber, NULL));
    // Gets the HBITMAP handle from the native DLL. The first argument is to select the device, based on serial number.
    getPicture(str, &hbmp);
    (*env)->ReleaseStringUTFChars(env, serialNumber, str);
    // Get the BITMAP for the HBITMAP
    GetObject(hbmp, sizeof(BITMAP), &bmp);
    // Create my BufferedImage
    jImageClass = (*env)->FindClass(env, "java/awt/image/BufferedImage");
    jMethod = (*env)->GetMethodID(env, jImageClass, "<init>", "(III)V");
    jField = (*env)->GetStaticFieldID(env, jImageClass, "TYPE_INT_RGB", "I");
    type = (*env)->GetStaticIntField(env, jImageClass, jField);
    jImage = (*env)->NewObject(env, jImageClass, jMethod, bmp.bmWidth, bmp.bmHeight, type);
    // Get the RGB byte triplets of the BITMAP
    charArray = (char *)malloc(sizeof(char) * bmp.bmHeight * bmp.bmWidth * 3);
    GetBitmapBits(hbmp, sizeof(char) * bmp.bmHeight * bmp.bmWidth * 3, charArray);
    // Allocate space to store the RGB ints and convert the RGB byte triplets to RGB ints
    intArray = (int *)malloc(sizeof(int) * bmp.bmHeight * bmp.bmWidth);
    index = 0;
    for (h = 0; h < bmp.bmHeight; ++h)
    for (w = 0; w < bmp.bmWidth; ++w)
    int b = *(charArray + index * 3) & 0xFF;
    int g = *(charArray + index * 3 + 1) & 0xFF;
    int r = *(charArray + index * 3 + 2) & 0xFF;
    *(intArray + index) = 0xFF000000 | (r << 16) | (g << 8) | b;
    ++index;
    // Create a jintArray for the C RGB ints
    rgbArray = (*env)->NewIntArray(env, bmp.bmHeight * bmp.bmWidth);
    (*env)->SetIntArrayRegion(env, rgbArray, 0, bmp.bmHeight * bmp.bmWidth, (jint*)intArray);
    // Use BufferedImage.setRGB() to fill the image
    jMethod = (*env)->GetMethodID(env, jImageClass, "setRGB", "(IIII[III)V");
    (*env)->CallVoidMethod(env, jImage, jMethod,
    0, // int startX
    0, // int startY
    bmp.bmWidth, // int width
    bmp.bmHeight, // int height
    rgbArray, // int[] rgbArray
    0, // int offset
    bmp.bmWidth); // int scansize
    // Free stuff
    (*env)->DeleteLocalRef(env, rgbArray);
    free(charArray);
    free(intArray);
    return jImage;
    }I already tried working with native HDCs (GetDC, CreateCompatibleBitmap, SelectObject, GetDIBits, ...) but this just complicates stuff and gives me the same result.

    Have you verified what the "native DLL" gives you back on the second call?The HBITMAP handle returned is the same each call (no matter which thread). The actual BITMAP associated with this handle is only updated in the first thread.
    How are you determining that the image is the same?If I point the camera (I don't get a stream, I just get individual images) to a moving scene, I get different images for each call from within the first thread. The second thread only gets the latest image from the first thread. There is no concurrency of the threads and all methods are synchronized.
    Specifically did you verify that the problem is not that your test code itself is using the same instance?Yes, I tested the native side as well as the Java side. The BufferedImage is always an exact copy of the native BITMAP.
    Try printing out the hash for each instance.I have written the image to a file in the native code itself to eliminate anything related to the mechanism of returning the BufferedImage. This had the same result.
    The return values of all native calls all indicate successful calls.
    I am suspecting the native side of creating a second graphical context for the second thread while it keeps refering to the first context.
    (I will start a thread on the MSDN as well and will post here if anything turns up.)

  • Sun Java System Web Server 6.1 SP3 service-j2ee threads problem

    Hi,
    Sorry my english.
    I'm an intermediate Java programmer and a newbie in
    the Sun's web servers world.
    I'm doing an evaluation of an web applicaction
    written in Java Servlets that is
    supposed to have a leaking threads problem. We use
    SunOS 5.9 (... sun4u sparc SUNW,UltraAX-i2) and
    JVM 1.5 Update 4 (the problem is presented too
    in SunOS 5.8 and JVM 1.4.2_04).
    We have seen, thanks to 'prstat' (PROCESS/NLWP) a
    increasing thread's growing in one of the process
    that correspond to our web server instance (I'm sure I'm
    looking the right process). I have checkout the source
    code and it seems like the app doesn't have threads
    problems. I have used the Netbeans Profiler and I see a
    high number of threads called service-j2ee-x that grows
    in congestion moments and never disappear.
    Anybody could help me with suggestions?
    Thank you very much.

    Elvin,
    Thankyou, yes I am unfamiliar with debugging Java apps. I got the web server Java stack trace and I have passed this on to the developer.
    The web server finally closes the socket connection after the total connections queued exceeds 4096.
    There are several hundred entries like this... waiting for monitor entry.. could be a deadlock somewhere?
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "service-j2ee-506" prio=5 tid=0x04b62a08 nid=0x17a waiting for monitor entry [dd74e000..dd74f770]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at com.verity.search.util.JSDispenser.getConnResource(Unknown Source)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: - waiting to lock <0xe979b2b0> (a com.verity.search.util.JSDispenser)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at com.verity.search.DocRead.getDoc(Unknown Source)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at com.verity.search.DocRead.getDoc(Unknown Source)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at com.verity.search.DocRead.docViewIntern(Unknown Source)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at com.verity.search.DocRead.docView(Unknown Source)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at au.com.relevance.viewDoc.PdfXmlServlet.performRequest(PdfXmlServlet.java:120)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at au.com.relevance.viewDoc.PdfXmlServlet.doGet(PdfXmlServlet.java:141)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at javax.servlet.http.HttpServlet.service(HttpServlet.java:787)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at javax.servlet.http.HttpServlet.service(HttpServlet.java:908)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.core.StandardWrapperValve.invokeServletService(StandardWrapperValve.java:771)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:322)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:212)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:209)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProcessor.java:161)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at com.iplanet.ias.web.WebContainer.service(WebContainer.java:580)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at com.iplanet.ias.web.WebContainer.service(WebContainer.java:580)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "StandardManager[highlight]" daemon prio=5 tid=0x000f3530 nid=0x1e waiting on condition [e15ff000..e15ffc28]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.sleep(Native Method)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.session.StandardManager.threadSleep(StandardManager.java:800)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.session.StandardManager.run(StandardManager.java:859)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.run(Thread.java:534)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "WebappLoader[highlight]" daemon prio=5 tid=0x000f3328 nid=0x1d waiting on condition [e16ff000..e16ffc28]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.sleep(Native Method)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.loader.WebappLoader.threadSleep(WebappLoader.java:1214)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.loader.WebappLoader.run(WebappLoader.java:1341)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.run(Thread.java:534)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "StandardManager[]" daemon prio=5 tid=0x000f2b08 nid=0x1c waiting on condition [e1b7f000..e1b7fc28]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.sleep(Native Method)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.session.StandardManager.threadSleep(StandardManager.java:800)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.session.StandardManager.run(StandardManager.java:859)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.run(Thread.java:534)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "WebappLoader[]" daemon prio=5 tid=0x000f2900 nid=0x1b waiting on condition [e1c7f000..e1c7fc28]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.sleep(Native Method)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.loader.WebappLoader.threadSleep(WebappLoader.java:1214)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.loader.WebappLoader.run(WebappLoader.java:1341)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.run(Thread.java:534)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "StandardManager[sitesearch]" daemon prio=5 tid=0x000f1cd0 nid=0x1a waiting on condition [e23ff000..e23ffc28]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.sleep(Native Method)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.session.StandardManager.threadSleep(StandardManager.java:800)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.session.StandardManager.run(StandardManager.java:859)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.run(Thread.java:534)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "WebappLoader[sitesearch]" daemon prio=5 tid=0x000f1ac8 nid=0x19 waiting on condition [e24ff000..e24ffc28]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.sleep(Native Method)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.loader.WebappLoader.threadSleep(WebappLoader.java:1214)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.loader.WebappLoader.run(WebappLoader.java:1341)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.run(Thread.java:534)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "StandardManager[search]" daemon prio=5 tid=0x000f0a88 nid=0x18 waiting on condition [e317f000..e317fc28]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.sleep(Native Method)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.session.StandardManager.threadSleep(StandardManager.java:800)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at org.apache.catalina.session.StandardManager.run(StandardManager.java:859)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Thread.run(Thread.java:534)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "Signal Dispatcher" daemon prio=10 tid=0x000ef840 nid=0x12 waiting on condition [0..0]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "Finalizer" daemon prio=8 tid=0x000ef638 nid=0x10 in Object.wait() [fa27f000..fa27fc28]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Object.wait(Native Method)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: - waiting on <0xe917fb10> (a java.lang.ref.ReferenceQueue$Lock)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: - locked <0xe917fb10> (a java.lang.ref.ReferenceQueue$Lock)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "Reference Handler" daemon prio=10 tid=0x000ef430 nid=0xf in Object.wait() [fa37f000..fa37fc28]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Object.wait(Native Method)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: - waiting on <0xe917fb78> (a java.lang.ref.Reference$Lock)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.Object.wait(Object.java:429)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: - locked <0xe917fb78> (a java.lang.ref.Reference$Lock)
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "main" prio=5 tid=0x000ee3f0 nid=0x1 runnable [0..ffbff200]
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "VM Thread" prio=5 tid=0x004ee328 nid=0xe runnable
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "VM Periodic Task Thread" prio=10 tid=0x004ee5d0 nid=0x16 waiting on condition
    [15/May/2006:22:01:51] warning ( 3196): CORE3283: stderr: "Suspend Checker Thread" prio=10 tid=0x004ee548 nid=0x11 runnable
    [15/May/2006:22:15:10] failure ( 3196): HTTP3287: connection limit (4096) exceeded, closing socket

  • The problem of profiling a multi-thread flash game  using adobe scout cc

    I have a multi-thread flash game code, it can run perfectly. The main swf creates another swf which will connect to a remote server. I can get profiling information of the main swf  using adobe scout cc, but the problem is that I can't get profiling information of another swf ! The scout complains " can't start a session because the telemetry data isn't valid" for another swf. Although some times, the scout does not complain, the Summary Panel of scout provides information“We encountered an error while processing this session: Some of the data we present may not be correct". And the scout log file shows:
    Log file created: 2014/11/20 15:35:08
    11/20/2014 15:35:08.395 Scout starting up.
    11/20/2014 15:35:08.471 InitDNSService failed
    11/20/2014 15:36:47.055 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [100000,200000] is greated than its parent
    11/20/2014 15:36:47.057 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [200000,300000] is greated than its parent
    11/20/2014 15:36:47.058 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [300000,400000] is greated than its parent
    11/20/2014 15:36:47.058 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [400000,500000] is greated than its parent
    11/20/2014 15:36:47.061 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [500000,600000] is greated than its parent
    11/20/2014 15:36:47.062 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [600000,700000] is greated than its parent
    11/20/2014 15:36:47.063 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [700000,800000] is greated than its parent
    11/20/2014 15:36:47.063 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [800000,900000] is greated than its parent
    11/20/2014 15:36:47.064 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [900000,1000000] is greated than its parent
    11/20/2014 15:36:47.064 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1000000,1100000] is greated than its parent
    11/20/2014 15:36:47.064 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1100000,1200000] is greated than its parent
    11/20/2014 15:36:47.065 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1200000,1300000] is greated than its parent
    11/20/2014 15:36:47.065 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1300000,1400000] is greated than its parent
    11/20/2014 15:36:47.065 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1400000,1500000] is greated than its parent
    11/20/2014 15:36:47.066 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1500000,1600000] is greated than its parent
    11/20/2014 15:36:47.066 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1600000,1700000] is greated than its parent
    11/20/2014 15:36:47.066 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1700000,1800000] is greated than its parent
    11/20/2014 15:36:47.067 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1800000,1900000] is greated than its parent
    11/20/2014 15:36:47.067 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [1900000,2000000] is greated than its parent
    11/20/2014 15:36:47.067 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2000000,2100000] is greated than its parent
    11/20/2014 15:36:47.068 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2100000,2200000] is greated than its parent
    11/20/2014 15:36:47.068 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2200000,2300000] is greated than its parent
    11/20/2014 15:36:47.068 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2300000,2400000] is greated than its parent
    11/20/2014 15:36:47.069 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2400000,2500000] is greated than its parent
    11/20/2014 15:36:47.069 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2500000,2600000] is greated than its parent
    11/20/2014 15:36:47.069 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2600000,2700000] is greated than its parent
    11/20/2014 15:36:47.070 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2700000,2800000] is greated than its parent
    11/20/2014 15:36:47.070 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2800000,2900000] is greated than its parent
    11/20/2014 15:36:47.070 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [2900000,3000000] is greated than its parent
    11/20/2014 15:36:47.071 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [3000000,3100000] is greated than its parent
    11/20/2014 15:36:47.071 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [3100000,3200000] is greated than its parent
    11/20/2014 15:46:30.931 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [100000,200000] is greated than its parent
    11/20/2014 15:46:30.933 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [200000,300000] is greated than its parent
    11/20/2014 15:46:30.936 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [300000,400000] is greated than its parent
    11/20/2014 15:46:30.937 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [400000,500000] is greated than its parent
    11/20/2014 15:46:30.937 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [500000,600000] is greated than its parent
    11/20/2014 15:46:30.937 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [600000,700000] is greated than its parent
    11/20/2014 15:46:30.937 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [700000,800000] is greated than its parent
    11/20/2014 15:46:30.938 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [800000,900000] is greated than its parent
    11/20/2014 15:46:30.938 <2896> <telemetryCore.Query> <1> Incorrect data: Memory category 7 for frame stats query over time interval [900000,1000000] is greated than its parent
    I run flash code directly on flash_player_11_7_sa.exe. I think the problem may have something to do with ActionScript Sampler of scout, because I can get the correct profiling information  without ActionScript Sampler.
    But I don't know what the information in the log file means.

    We are using Microsoft SQL Server 2008 . but it's well with MySQL & JBoss

  • Multi thread java applet

    I cannot make multi thread applet. It seems like there is only one thread.
    Here is the code:
    public class My extends JApplet {
    public void init() {
       new Thread() {
                public void run() {
                    try {
                        nit();
                    } catch (Exception e) {
            }.run();
            int i = 99;
            try {
                getAppletContext().showDocument(new URL("javascript:alert(" + String.valueOf(i) + ")"));
            catch (MalformedURLException e) { }
           public void nit() {
            for (int i = 0; i < 5; i++) {
                this.label.setText("Brojim: " + String.valueOf(i));
                try {
                    getAppletContext().showDocument(new URL("javascript:alert(" + String.valueOf(i) + ")"));
                catch (MalformedURLException e) { }
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) { }
    }and here is the result:
    0
    1
    2
    3
    4
    99which means that after run() call it not continue the flow, but waits for thread to finish. What is the problem?
    OS: XP, browser: FF3

    You are calling run() method of Thread class. This is wrong. If you want to create new thread you should call start() method. Try the following:
    new Thread() {
                public void run() {
                    try {
                        nit();
                    } catch (Exception e) {
            }.start();

  • Question using Java API in a multi threaded application for MDX queries

    Currently I’m building a web application that makes a lot of MDX calls using the Essbase Java API. Each time we run an MDX call we basically run the following code:
    IEssbase ess = IEssbase.Home.create(IEssbase.JAPI_VERSION);
    IEssDomain dom = ess.signOn(userName, password, false, null, "embedded");
    IEssCubeView cv = cv=dom.openCubeView("view", hostName, appName, cubeName);
    IEssOpMdxQuery op = cv.createIEssOpMdxQuery();
    op.setQuery(false,mdx,false,IEssOpMdxQuery.EEssMemberIdentifierType.NAME);
    cv.performOperation(op);
    IEssMdDataSet mddata = cv.getMdDataSet();
    cv.close();
    My questions is, is this the correct way to use the API in multi threaded environment where many users may be hitting the application at the same time? For every request do I need to create a separate IEssbase object and sign on to an IEssDomain? Or can I use a single IEssbase and IEssDomain object for the entire application? If not should I call the IEssDomain.signOff() method after each user’s request has completed? Which of the above objects are thread safe? I’m using Essabae 9.3.1. Any insight would be really appreciated.
    Thanks
    David

    Thanks for the input friend,
    I should have mentioned that in my application all
    connections to Essbase use the same user name and
    password so the filtering isn’t a concern. This is my
    first Java application using Essbase has a data
    source, I’m used to connecting to various SQL
    databases and I always use a connection pool, how is
    connection pooling handled in the Essbase java API?I'm not sure what happened to it since I never used it, but there used to be something called the High Availability Services or something that was essentially a connection pool for Essbase JAPI connections, but it required an extra license.
    Since you don't care about identity (everyone has full access to everything), you can create your own connection pool, but you'll have to manage your multithreading yourself. Its been this way since the beginning. The C API isn't/wasn't thread-safe either (we tried).

Maybe you are looking for