CancellationTokenSource.java
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.cosmos.implementation.changefeed;
import java.io.Closeable;
import java.io.IOException;
/**
 * Signals to a {@link CancellationToken} that it should be canceled..
 */
public class CancellationTokenSource implements Closeable {
    private volatile boolean tokenSourceClosed;
    private volatile boolean cancellationRequested;
    public CancellationTokenSource() {
        this.tokenSourceClosed = false;
        this.cancellationRequested = false;
    }
    public synchronized boolean isCancellationRequested() {
        if (tokenSourceClosed) {
            throw new IllegalStateException("Object already closed");
        }
        return this.cancellationRequested;
    }
    public CancellationToken getToken() {
        return new CancellationToken(this);
    }
    public synchronized void cancel() {
        this.cancellationRequested = true;
    }
    @Override
    public synchronized void close() throws IOException {
        if (tokenSourceClosed) return;
    }
}