Project

General

Profile

« Previous | Next » 

Revision 2f40484b

Added by Leszek Koltunski about 3 years ago

Improve EffectMessageSender: ArrayList with explicit locking in place of a Vector.

View differences:

src/main/java/org/distorted/library/message/EffectMessageSender.java
21 21

  
22 22
import org.distorted.library.effect.Effect;
23 23

  
24
import java.util.Vector;
24
import java.util.ArrayList;
25 25

  
26 26
///////////////////////////////////////////////////////////////////////////////////////////////////
27 27
/**
......
43 43
      }
44 44
    }
45 45

  
46
  private static final Object mArrayLock   = new Object();
46 47
  private static final Object mLock        = new Object();
47
  private static Vector<Message> mList     = null;
48
  private static ArrayList<Message> mList  = null;
48 49
  private static EffectMessageSender mThis = null;
49 50
  private static volatile boolean mNotify  = false;
50
  private static int mNumStarts            = 0;
51 51

  
52
  // debug only, to be removed later
53
  private static int mNumStarts = 0;
52 54
  private static long mStartTime, mStopTime;
53 55

  
54 56
///////////////////////////////////////////////////////////////////////////////////////////////////
......
69 71

  
70 72
      if( mThis==null )
71 73
        {
72
        mList = new Vector<>();
74
        mList = new ArrayList<>();
73 75
        mThis = new EffectMessageSender();
74 76
        mThis.start();
75 77
        }
......
101 103
     
102 104
    while(mThis!=null)
103 105
      {
104
      while( mList.size()>0 )
106
      synchronized(mArrayLock)
105 107
        {
106
        tmp = mList.remove(0);
107
        tmp.mListener.effectFinished(tmp.mEffectID);
108
        int size = mList.size();
109

  
110
        for(int i=0; i<size; i++)
111
          {
112
          tmp = mList.remove(0);
113
          tmp.mListener.effectFinished(tmp.mEffectID);
114
          }
108 115
        }
109 116

  
110 117
      synchronized(mLock)
......
131 138
      {
132 139
      long id = effect.getID();
133 140

  
134
      for(int i=0; i<numListeners; i++)
141
      synchronized(mArrayLock)
135 142
        {
136
        EffectListener listener = effect.removeFirstListener();
137
        Message msg = new Message(listener,id);
138
        mList.add(msg);
143
        for(int i=0; i<numListeners; i++)
144
          {
145
          EffectListener listener = effect.removeFirstListener();
146
          Message msg = new Message(listener,id);
147
          mList.add(msg);
148
          }
139 149
        }
140 150

  
141 151
      synchronized(mLock)
......
161 171
      {
162 172
      if( mThis==null )
163 173
        {
164
        if( mList==null ) mList = new Vector<>();
174
        if( mList==null ) mList = new ArrayList<>();
165 175
        mThis = new EffectMessageSender();
166 176
        mThis.start();
167 177
        }

Also available in: Unified diff