Anton, there have been a few bug fixes since the JDK you're using.  You
really should use JDK 1.3.1_03.  I don;t know how much of a diff it will
make, but it's worth a shot.  I've had a few problems with applets with
previous versions to 1.3.1_03 and it was worth the switch.  It seems
that IDEA behaves better with it too.

R
On Fri, 2002-04-12 at 08:46, Anton Shahu wrote:
> The debugger has a hard time switching contexts and apparently
> loses track if the next breakpoint happens in another thread as shown
> in the two attached files.
> 
> Place a breakpoint at respectively readValues and writeValues of RWTest
> and debug RWTest.  The first times the debugger will stop at readValues
> but then the next breakpoint seems never to be reached.  The CPU is at
> almost 0% and the JVM has clearly stopped, but Idea doesn't know this...
> 
> The same thing works like clockwork with Bugseeker.  JDK used
> 
> java -version
> java version "1.3.1"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24)
> Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode)
> 
> socket or memory have same effect, but chosing classic seems to solve
> the issue.  The help file says otherwise...
> 
> Idea build 616
> 
> Anton
> 
> _________________________________________________________________
> Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp.
> ----
> 

> 
> public class RWLock {
> 
>     private int readers;
>     private int writersWaiting;
> 
>     private boolean writingInProgress;
>     private int maxWritersWaiting = 1;
> 
>     RWLock(int maxWW) {
>         maxWritersWaiting = maxWW;
>     }
> 
>     synchronized public void getReadLock() {
>         while (writingInProgress | (writersWaiting >= maxWritersWaiting)) {
>             try {
>                 wait();
>             } catch (InterruptedException ie) {
>             }
>         }
>         readers++;
>     }
> 
>     synchronized public void releaseReadLock() {
>         readers--;
>         if ((readers == 0) & (writersWaiting > 0)) {
>             notify();
>         }
>     }
> 
>     synchronized public void getWriteLock() {
>         writersWaiting++;
>         while ((readers > 0) | writingInProgress) {
>             try {
>                 wait();
>             } catch (InterruptedException ie) {
>             }
>         }
>         writersWaiting--;
>         writingInProgress = true;
>     }
> 
>     synchronized public void releaseWriteLock() {
>         writingInProgress = false;
>         notifyAll();
>     }
> 
>     public int getReaders() {
>         return readers;
>     }
> 
>     public int getWaitingWriters() {
>         return writersWaiting;
>     }
> 
> }
> 
> /*
> * $Log:$
> */
> ----
> 

> public class RWTest {
>     int arr[];
>     String name;
>     RWLock lock;
> 
>     public static void main(String args[]) {
>         RWTest rwtest = new RWTest();
>     }
> 
> 
>     RWTest() {
>         lock = new RWLock(3);
>         arr = new int[3];
>         name = "name";
>         for (int i = 0; i < 20; i++)
>             (new ReaderThread()).start();
> 
>         for (int j = 0; j < 4; j++)
>             (new WriterThread()).start();
>     }
> 
>     public void readValues() {
>         lock.getReadLock();
>         System.out.println("Read Lock obtained by " + 
> Thread.currentThread().getName());
>         System.out.println("    >>>>      Readers active  = " + 
> lock.getReaders());
>         System.out.println("    >>>>      Writers waiting = " + 
> lock.getWaitingWriters());
>         for (int i = 0; i < arr.length; i++)
>             System.out.print(arr[i] + " ");
>         System.out.println(name);
> //PLACE BREAKPOINT IN NEXT LINE
>         System.out.println("Read Lock to be released by " + 
> Thread.currentThread().getName());
>         lock.releaseReadLock();
>     }
> 
>     public void writeValues() {
>         lock.getWriteLock();
>         System.out.println("Write Lock obtained by " + 
> Thread.currentThread().getName());
>         int value = (int) (Math.random() * 100);
>         for (int i = 0; i < arr.length; i++)
>             arr[i] = value;
>         name = "" + value;
> //PLACE BREAKPOINT IN NEXT LINE
>         System.out.println("Write Lock to be released by " + 
> Thread.currentThread().getName());
>         lock.releaseWriteLock();
>     }
> 
>     class ReaderThread extends Thread {
>         public void run() {
>             while (true) {
>                 try {
>                     readValues();
>                     Thread.sleep((int) (Math.random() * 50));
>                 } catch (Exception e) {
>                 }
>             }
>         }
>     }
> 
>     class WriterThread extends Thread {
>         public void run() {
>             while (true) {
>                 try {
>                     writeValues();
>                     Thread.sleep((int) (Math.random() * 100));
>                 } catch (Exception e) {
>                 }
>             }
>         }
>     }
> }
> 


_______________________________________________
Eap-list mailing list
[EMAIL PROTECTED]
http://www.intellij.com/mailman/listinfo/eap-list

Reply via email to