Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jboss.remoting.samples.chat.utility;

Title: Chat4

Description:

Copyright: Copyright (c) 2003

Company:

Author(s):
not attributable
Version:
1.0
 
 
 import java.util.*;
 import java.io.*;
 
 public class ReadWriteArrayList implements Serializable
 {
   private ArrayList arrayList;
   private static final long serialVersionUID = 6;
   private Gate gate = new Gate();
 
   public ReadWriteArrayList()
   {
        = new ArrayList();
   }
 
   public boolean add(Object o)
   {
     .enterWrite();
     .add(o);
     .leaveWrite();
     return true;
   }
 
   public Object get(int i)
   {
     .enterRead(i);
     Object o = .get(i);
     .leaveRead();
     return o;
   }
 
   public ArrayList copy()
   {
     return (ArrayListsubList(0, .size());
   }
 
   public List subList(int fromint to)
   {
     .enterRead(to - 1);
     List list = new ArrayList(.subList(fromto));
     .leaveRead();
     return list;
   }
 
   public Object firstElement()
   {
     return get(0);
   }
 
   public Object remove(int i)
   {
     .enterRead(i);
     Object o = .remove(i);
     .leaveRead();
     return o;
   }
 
   public int size()
   {
     return .size();
   }
 
   public Object[] toArray()
   {
     return .toArray();
   }
 
   public Object[] toArray(Object[] a)
   {
     return .toArray(a);
   }
 
   public ArrayList toArrayList()
   {
     return ;
   }
 
 
 ////////////////////////////////////////////////////////////////////////////////
   class Gate implements Serializable
   {
     private static final long serialVersionUID = 7;
 
     private int numberOfReaders;
     private int numberOfWriters;
 
     public synchronized void enterRead(int i)
     {
       while ( > 0 || i > .size() - 1)
      {
        try {
          wait();
        }
        catch (InterruptedException ie) { }
      }
      ++;
    }
    public synchronized void enterWrite()
    {
      while ( > 0 ||  > 0)
      {
        try {
          wait();
        }
        catch (InterruptedException ie) { }
      }
      ++;
    }
    public synchronized void leaveRead()
    {
      if ( <= 0)
        throw new Error("number of readers <= 0");
      --;
      notifyAll();
    }
    public synchronized void leaveWrite()
    {
      if ( <= 0)
        throw new Error("number of writers <= 0");
      --;
      notifyAll();
    }
  }
////////////////////////////////////////////////////////////////////////////////
New to GrepCode? Check out our FAQ X