Some synchronized changes.

This commit is contained in:
MobiusDev
2016-04-30 20:04:02 +00:00
parent 15d263a788
commit b001087964
17 changed files with 127 additions and 492 deletions

View File

@@ -51,7 +51,7 @@ public final class BuffInfo
private final List<AbstractEffect> _effects = new ArrayList<>(1);
// Tasks
/** Effect tasks for ticks. */
private volatile Map<AbstractEffect, EffectTaskInfo> _tasks;
private volatile Map<AbstractEffect, EffectTaskInfo> _tasks = new ConcurrentHashMap<>();
/** Scheduled future. */
private ScheduledFuture<?> _scheduledFutureTimeTask;
// Time and ticks
@@ -106,16 +106,6 @@ public final class BuffInfo
*/
private void addTask(AbstractEffect effect, EffectTaskInfo effectTaskInfo)
{
if (_tasks == null)
{
synchronized (this)
{
if (_tasks == null)
{
_tasks = new ConcurrentHashMap<>();
}
}
}
_tasks.put(effect, effectTaskInfo);
}
@@ -126,7 +116,7 @@ public final class BuffInfo
*/
private EffectTaskInfo getEffectTask(AbstractEffect effect)
{
return (_tasks == null) ? null : _tasks.get(effect);
return _tasks.get(effect);
}
/**
@@ -318,12 +308,9 @@ public final class BuffInfo
public void finishEffects()
{
// Cancels the ticking task.
if (_tasks != null)
for (EffectTaskInfo effectTask : _tasks.values())
{
for (EffectTaskInfo effectTask : _tasks.values())
{
effectTask.getScheduledFuture().cancel(true); // Don't allow to finish current run.
}
effectTask.getScheduledFuture().cancel(true); // Don't allow to finish current run.
}
// Remove stats
removeStats();
@@ -405,13 +392,10 @@ public final class BuffInfo
*/
public int getTickCount(AbstractEffect effect)
{
if (_tasks != null)
final EffectTaskInfo effectTaskInfo = _tasks.get(effect);
if (effectTaskInfo != null)
{
final EffectTaskInfo effectTaskInfo = _tasks.get(effect);
if (effectTaskInfo != null)
{
return effectTaskInfo.getEffectTask().getTickCount();
}
return effectTaskInfo.getEffectTask().getTickCount();
}
return 0;
}

View File

@@ -1834,28 +1834,25 @@ public final class Skill implements IIdentifiable
{
synchronized (this)
{
if (_effectTypes == null)
final Set<Byte> effectTypesSet = new HashSet<>();
for (List<AbstractEffect> effectList : _effectLists.values())
{
final Set<Byte> effectTypesSet = new HashSet<>();
for (List<AbstractEffect> effectList : _effectLists.values())
if (effectList != null)
{
if (effectList != null)
for (AbstractEffect effect : effectList)
{
for (AbstractEffect effect : effectList)
if (effect == null)
{
if (effect == null)
{
continue;
}
effectTypesSet.add((byte) effect.getEffectType().ordinal());
continue;
}
effectTypesSet.add((byte) effect.getEffectType().ordinal());
}
}
final Byte[] effectTypesArray = effectTypesSet.toArray(new Byte[effectTypesSet.size()]);
Arrays.sort(effectTypesArray);
_effectTypes = effectTypesArray;
}
final Byte[] effectTypesArray = effectTypesSet.toArray(new Byte[effectTypesSet.size()]);
Arrays.sort(effectTypesArray);
_effectTypes = effectTypesArray;
}
}