com.liferay.portal.kernel.concurrent.DefaultNoticeableFuture Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.portal.kernel Show documentation
Show all versions of com.liferay.portal.kernel Show documentation
Contains interfaces for the portal services. Interfaces are only loaded by the global class loader and are shared by all plugins.
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
package com.liferay.portal.kernel.concurrent;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author Shuyang Zhou
*/
public class DefaultNoticeableFuture
extends FutureTask implements NoticeableFuture {
@SuppressWarnings("unchecked")
public DefaultNoticeableFuture() {
super((Callable)_emptyCallable);
}
public DefaultNoticeableFuture(Callable callable) {
super(callable);
}
public DefaultNoticeableFuture(Runnable runnable, T result) {
super(runnable, result);
}
@Override
public boolean addFutureListener(FutureListener futureListener) {
if (futureListener == null) {
throw new NullPointerException("Future listener is null");
}
futureListener = new OnceFutureListener<>(futureListener);
if (_futureListeners.add(futureListener)) {
if (isDone()) {
futureListener.complete(this);
}
return true;
}
return false;
}
@Override
public boolean removeFutureListener(FutureListener futureListener) {
if (futureListener == null) {
throw new NullPointerException("Future listener is null");
}
return _futureListeners.remove(
new OnceFutureListener(futureListener));
}
@Override
public void set(T t) {
super.set(t);
}
@Override
public void setException(Throwable throwable) {
super.setException(throwable);
}
@Override
protected void done() {
for (FutureListener futureListener : _futureListeners) {
futureListener.complete(this);
}
}
private static final Callable