/**
* Alipay.com Inc.
* Copyright (c) 2004-2012 All Rights Reserved.
*/
package com.alipay.zdal.datasource.resource.util.threadpool;
import java.io.ObjectStreamException;
import java.io.Serializable;
/** A type-safe enum for the BasicThreadPool blocking mode.
*
* @author ����
* @version $Id: BlockingMode.java, v 0.1 2014-1-6 ����05:44:02 Exp $
*/
public class BlockingMode implements Serializable {
/** @since 1.0 */
private static final long serialVersionUID = -9102277941374138830L;
public static final int RUN_TYPE = 0;
public static final int WAIT_TYPE = 1;
public static final int DISCARD_TYPE = 2;
public static final int DISCARD_OLDEST_TYPE = 3;
public static final int ABORT_TYPE = 4;
/** Set the policy for blocked execution to be that the current thread
executes the command if there are no available threads in the pool.
*/
public static final BlockingMode RUN = new BlockingMode("run", RUN_TYPE);
/** Set the policy for blocked execution to be to wait until a thread
* is available, unless the pool has been shut down, in which case
* the action is discarded.
*/
public static final BlockingMode WAIT = new BlockingMode("wait", WAIT_TYPE);
/** Set the policy for blocked execution to be to return without
* executing the request.
*/
public static final BlockingMode DISCARD = new BlockingMode("discard", DISCARD_TYPE);
/** Set the policy for blocked execution to be to discard the oldest
* unhandled request
*/
public static final BlockingMode DISCARD_OLDEST = new BlockingMode("discardOldest",
DISCARD_OLDEST_TYPE);
/** Set the policy for blocked execution to be to throw an AbortWhenBlocked
* (a subclass of RuntimeException).
*/
public static final BlockingMode ABORT = new BlockingMode("abort", ABORT_TYPE);
/** The string form of the enum */
private final transient String name;
/** The enum manifest constant */
private final int type;
/** A utility method to convert a string name to a BlockingMode
* @param name
* @return The associated BlockingMode constant if name is valid, null otherwise
*/
public static final BlockingMode toBlockingMode(String name) {
BlockingMode mode = null;
if (name == null) {
mode = null;
} else if (name.equalsIgnoreCase("run")) {
mode = RUN;
} else if (name.equalsIgnoreCase("wait")) {
mode = WAIT;
} else if (name.equalsIgnoreCase("discard")) {
mode = DISCARD;
} else if (name.equalsIgnoreCase("discardOldest")) {
mode = DISCARD_OLDEST;
} else if (name.equalsIgnoreCase("abort")) {
mode = ABORT;
}
return mode;
}
private BlockingMode(String name, int type) {
this.name = name;
this.type = type;
}
public String toString() {
return name;
}
/**
* Overriden to return the indentity instance of BlockingMode based on the
* stream type int value. This ensures that BlockingMode enums can be
* compared using ==.
*
* @return The BlockingMode instance for the XXX_TYPE int.
* @throws ObjectStreamException
*/
Object readResolve() throws ObjectStreamException {
// Replace the marshalled instance type with the local instance
BlockingMode mode = ABORT;
switch (type) {
case RUN_TYPE:
mode = RUN;
break;
case WAIT_TYPE:
mode = RUN;
break;
case DISCARD_TYPE:
mode = RUN;
break;
case DISCARD_OLDEST_TYPE:
mode = RUN;
break;
case ABORT_TYPE:
mode = RUN;
break;
}
return mode;
}
}