Java 类java.lang.Thread.UncaughtExceptionHandler 实例源码
项目:incubator-netbeans
文件:TopThreadGroup.java
@Override
public void uncaughtException(Thread t, Throwable e) {
if (!(e instanceof ThreadDeath)) {
UncaughtExceptionHandler h = Thread.getDefaultUncaughtExceptionHandler();
if (h != null) {
h.uncaughtException(t, e);
return;
}
if (e instanceof VirtualMachineError) {
// Try as hard as possible to get a stack trace from e.g. StackOverflowError
e.printStackTrace();
}
System.err.flush();
Exceptions.printStackTrace(e);
}
else {
super.uncaughtException(t, e);
}
}
项目:uid-generator
文件:NamingThreadFactory.java
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setDaemon(this.daemon);
// If there is no specified name for thread, it will auto detect using the invoker classname instead.
// Notice that auto detect may cause some performance overhead
String prefix = this.name;
if (StringUtils.isBlank(prefix)) {
prefix = getInvoker(2);
}
thread.setName(prefix + "-" + getSequence(prefix));
// no specified uncaughtExceptionHandler, just do logging.
if (this.uncaughtExceptionHandler != null) {
thread.setUncaughtExceptionHandler(this.uncaughtExceptionHandler);
} else {
thread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
LOGGER.error("unhandled exception in thread: " + t.getId() + ":" + t.getName(), e);
}
});
}
return thread;
}
项目:neoscada
文件:BufferingStorageDao.java
protected synchronized void startWriter ()
{
if ( this.disposed )
{
logger.warn ( "We are disposed. Not starting writer" );
return;
}
this.writerThread = new Thread ( "BufferingStorageDao" ) {
@Override
public void run ()
{
writer ();
}
};
this.writerThread.start ();
this.writerThread.setUncaughtExceptionHandler ( new UncaughtExceptionHandler () {
@Override
public void uncaughtException ( final Thread t, final Throwable e )
{
logger.error ( "Writer thread failed. Restarting ...", e );
startWriter ();
}
} );
}
项目:L2J-Global
文件:ThreadPoolManager.java
@Override
public final void run()
{
try
{
_r.run();
}
catch (Throwable e)
{
final Thread t = Thread.currentThread();
final UncaughtExceptionHandler h = t.getUncaughtExceptionHandler();
if (h != null)
{
h.uncaughtException(t, e);
}
}
}
项目:homunculus
文件:UnbreakableCrashHandler.java
protected void resurrect(Thread t, Throwable e, @Nullable UncaughtExceptionHandler handler) {
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
//handle the first crash of the main looper
fixRenderingAndDispatchCrash(t, e, handler);
while (true) {
try {
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
} catch (Throwable followUpExceptions) {
//at this point, we never enter the "uncaught" exception again, because our looper is already protected
print(e);
fixRenderingAndDispatchCrash(t, e, handler);
}
}
} else {
//not the main thread, nothing to revive, but for the sake of consistency we treat it the same
fixRenderingAndDispatchCrash(t, e, handler);
}
}
项目:homunculus
文件:UnbreakableCrashHandler.java
protected void fixRenderingAndDispatchCrash(Thread t, Throwable e, @Nullable UncaughtExceptionHandler handler) {
Thread otherThread = new Thread() {
@Override
public void run() {
mMainHandler.post(() -> {
//invoke the given handler
if (handler != null) {
handler.uncaughtException(t, e);
}
//dispatch, when possible
Scope appScope = ContextScope.getScope(mAppContext);
if (appScope != null) {
recursiveFixUI(appScope);
recursiveDispatch(appScope, t, e);
}
});
}
};
otherThread.setName("pacemaker");
otherThread.start();
}
项目:decoy
文件:AppCrashHandler.java
private AppCrashHandler(Context context) {
this.context = context;
// get default
uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
// install
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, final Throwable ex) {
// save log
saveException(ex, true);
// uncaught
uncaughtExceptionHandler.uncaughtException(thread, ex);
}
});
}
项目:scorekeeperfrontend
文件:AppSetup.java
/**
* Do some common setup for all applications at startup
* @param name the application name used for Java logging and database logging
*/
public static void appSetup(String name)
{
// Set our platform wide L&F
System.setProperty("swing.defaultlaf", "javax.swing.plaf.nimbus.NimbusLookAndFeel");
UIDefaults defaults = UIManager.getLookAndFeelDefaults();
defaults.put("Table.gridColor", new Color(140,140,140));
defaults.put("Table.showGrid", true);
// Set the program name which is used by PostgresqlDatabase to identify the app in logs
System.setProperty("program.name", name);
// Start with a fresh root set at warning
Logger root = LogManager.getLogManager().getLogger("");
Formatter format = new SingleLineFormatter();
root.setLevel(Level.WARNING);
for(Handler handler : root.getHandlers()) {
root.removeHandler(handler);
}
// Set prefs levels before windows preference load barfs useless data on the user
Logger.getLogger("java.util.prefs").setLevel(Level.SEVERE);
// postgres JDBC spits out a lot of data even though we catch the exception
Logger.getLogger("org.postgresql.jdbc").setLevel(Level.OFF);
Logger.getLogger("org.postgresql.Driver").setLevel(Level.OFF);
// Add console handler if running in debug mode
if (Prefs.isDebug()) {
ConsoleHandler ch = new ConsoleHandler();
ch.setLevel(Level.ALL);
ch.setFormatter(format);
root.addHandler(ch);
}
// For our own logs, we can set super fine level or info depending on if debug mode and attach dialogs to those
Logger applog = Logger.getLogger("org.wwscc");
applog.setLevel(Prefs.isDebug() ? Level.FINEST : Level.INFO);
applog.addHandler(new AlertHandler());
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
applog.log(Level.WARNING, String.format("\bUncaughtException in %s: %s", t, e), e);
}});
try {
File logdir = Prefs.getLogDirectory().toFile();
if (!logdir.exists())
if (!logdir.mkdirs())
throw new IOException("Can't create log directory " + logdir);
FileHandler fh = new FileHandler(new File(logdir, name+".%g.log").getAbsolutePath(), 1000000, 10, true);
fh.setFormatter(format);
fh.setLevel(Level.ALL);
root.addHandler(fh);
} catch (IOException ioe) {
JOptionPane.showMessageDialog(FocusManager.getCurrentManager().getActiveWindow(),
"Unable to enable logging to file: " + ioe, "Log Error", JOptionPane.ERROR_MESSAGE);
}
// force the initialization of IdGenerator on another thread so app can start now without an odd delay later
new Thread() {
public void run() {
IdGenerator.generateId();
}
}.start();
}
项目:util
文件:ForkJoinPool.java
/**
* Creates and returns the common pool, respecting user settings specified
* via system properties.
*/
private static ForkJoinPool makeCommonPool() {
int parallelism = -1;
ForkJoinWorkerThreadFactory factory = defaultForkJoinWorkerThreadFactory;
UncaughtExceptionHandler handler = null;
try { // ignore exceptions in accessing/parsing properties
String pp = System.getProperty("java.util.concurrent.ForkJoinPool.common.parallelism");
String fp = System.getProperty("java.util.concurrent.ForkJoinPool.common.threadFactory");
String hp = System.getProperty("java.util.concurrent.ForkJoinPool.common.exceptionHandler");
if (pp != null)
parallelism = Integer.parseInt(pp);
if (fp != null)
factory = ((ForkJoinWorkerThreadFactory) ClassLoader.getSystemClassLoader().loadClass(fp)
.newInstance());
if (hp != null)
handler = ((UncaughtExceptionHandler) ClassLoader.getSystemClassLoader().loadClass(hp).newInstance());
} catch (Exception ignore) {
}
if (parallelism < 0 && // default 1 less than #cores
(parallelism = Runtime.getRuntime().availableProcessors() - 1) < 0)
parallelism = 0;
if (parallelism > MAX_CAP)
parallelism = MAX_CAP;
return new ForkJoinPool(parallelism, factory, handler, LIFO_QUEUE, "ForkJoinPool.commonPool-worker-");
}
项目:ditb
文件:Threads.java
/**
* Get a named {@link ThreadFactory} that just builds daemon threads.
* @param prefix name prefix for all threads created from the factory
* @param handler unhandles exception handler to set for all threads
* @return a thread factory that creates named, daemon threads with
* the supplied exception handler and normal priority
*/
public static ThreadFactory newDaemonThreadFactory(final String prefix,
final UncaughtExceptionHandler handler) {
final ThreadFactory namedFactory = getNamedThreadFactory(prefix);
return new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = namedFactory.newThread(r);
if (handler != null) {
t.setUncaughtExceptionHandler(handler);
} else {
t.setUncaughtExceptionHandler(LOGGING_EXCEPTION_HANDLER);
}
if (!t.isDaemon()) {
t.setDaemon(true);
}
if (t.getPriority() != Thread.NORM_PRIORITY) {
t.setPriority(Thread.NORM_PRIORITY);
}
return t;
}
};
}
项目:firebase-admin-java
文件:DefaultRunLoop.java
private void handleExceptionInternal(Throwable e) {
UncaughtExceptionHandler exceptionHandler;
exceptionHandler = getExceptionHandler();
try {
if (exceptionHandler != null) {
exceptionHandler.uncaughtException(Thread.currentThread(), e);
}
} finally {
handleException(e);
}
}
项目:firebase-admin-java
文件:ThreadPoolEventTarget.java
@Override
public void uncaughtException(Thread t, Throwable e) {
UncaughtExceptionHandler delegate;
synchronized (this) {
delegate = exceptionHandler;
}
if (delegate != null) {
delegate.uncaughtException(t, e);
}
}
项目:firebase-admin-java
文件:DefaultRunLoopTest.java
@Test
public void testExceptionHandling() throws InterruptedException {
MockRunLoop runLoop = new MockRunLoop();
final Semaphore semaphore = new Semaphore(0);
UncaughtExceptionHandler exceptionHandler = new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
semaphore.release();
}
};
runLoop.setExceptionHandler(exceptionHandler);
assertSame(exceptionHandler, runLoop.getExceptionHandler());
try {
assertEquals(0, runLoop.getThreadPool().getCorePoolSize());
runLoop.scheduleNow(new Runnable() {
@Override
public void run() {
throw new RuntimeException("test error");
}
});
assertEquals(1, runLoop.getThreadPool().getCorePoolSize());
semaphore.acquire();
synchronized (runLoop.errors) {
if (runLoop.errors.isEmpty()) {
runLoop.errors.wait(TestUtils.TEST_TIMEOUT_MILLIS);
}
}
assertEquals(1, runLoop.errors.size());
} finally {
runLoop.getExecutorService().shutdownNow();
}
}
项目:firebase-admin-java
文件:RevivingScheduledExecutorTest.java
@Override
public Thread newThread(Runnable r) {
if (r == null) {
return null;
}
Thread thread = Executors.defaultThreadFactory().newThread(r);
thread.setUncaughtExceptionHandler(
new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
// ignore -- to prevent the test output from getting cluttered
}
});
return thread;
}
项目:sstore-soft
文件:ThreadUtil.java
/**
* Have shutdown actually means shutdown. Tasks that need to complete should use
* futures.
*/
public static ScheduledThreadPoolExecutor getScheduledThreadPoolExecutor(String name, UncaughtExceptionHandler handler, int poolSize, int stackSize) {
// HACK: ScheduledThreadPoolExecutor won't let use the handler so
// if we're using ExceptionHandlingRunnable then we'll be able to
// pick up the exceptions
Thread.setDefaultUncaughtExceptionHandler(handler);
ThreadFactory factory = getThreadFactory(name, handler);
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(poolSize, factory);
executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(false);
executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
return executor;
}
项目:sstore-soft
文件:ThreadUtil.java
public static ThreadFactory getThreadFactory(final String name, final UncaughtExceptionHandler handler) {
return new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(null, r, name, 1024*1024);
t.setDaemon(true);
t.setUncaughtExceptionHandler(handler);
return t;
}
};
}
项目:JRediClients
文件:RedissonThreadFactory.java
public RedissonThreadFactory(UncaughtExceptionHandler exceptionHandler) {
SecurityManager s = System.getSecurityManager();
group = (s != null) ? s.getThreadGroup() :
Thread.currentThread().getThreadGroup();
namePrefix = "redisson-node-" + poolNumber.getAndIncrement() + "-thread-";
this.exceptionHandler = exceptionHandler;
}
项目:Nird2
文件:BrambleTestCase.java
public BrambleTestCase() {
// Ensure exceptions thrown on worker threads cause tests to fail
UncaughtExceptionHandler fail = new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
throwable.printStackTrace();
fail();
}
};
Thread.setDefaultUncaughtExceptionHandler(fail);
}
项目:Nird2
文件:BrambleTestCase.java
public BrambleTestCase() {
// Ensure exceptions thrown on worker threads cause tests to fail
UncaughtExceptionHandler fail = new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
throwable.printStackTrace();
fail();
}
};
Thread.setDefaultUncaughtExceptionHandler(fail);
}
项目:log4j-aws-appenders
文件:DefaultThreadFactory.java
@Override
public void startLoggingThread(LogWriter writer, UncaughtExceptionHandler exceptionHandler)
{
Thread writerThread = new Thread(writer);
writerThread.setName("log4j-aws-writer-" + threadNumber.getAndIncrement());
writerThread.setPriority(Thread.NORM_PRIORITY);
writerThread.setUncaughtExceptionHandler(exceptionHandler);
writerThread.start();
}
项目:guava-mock
文件:AbstractServiceTest.java
private void invokeOnExecutionThreadForTest(Runnable runnable) {
executionThread = new Thread(runnable);
executionThread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable e) {
thrownByExecutionThread = e;
}
});
executionThread.start();
}
项目:guava-mock
文件:AbstractExecutionThreadServiceTest.java
@Override
public void execute(Runnable command) {
executionThread = new Thread(command);
executionThread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable e) {
thrownByExecutionThread = e;
}
});
executionThread.start();
}
项目:RxJava3-preview
文件:RxJavaCommonPluginsTest.java
@Test
public void onErrorNoHandler() {
try {
final List<Throwable> list = new ArrayList<Throwable>();
RxJavaCommonPlugins.setErrorHandler(null);
Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
list.add(e);
}
});
RxJavaCommonPlugins.onError(new TestException("Forced failure"));
Thread.currentThread().setUncaughtExceptionHandler(null);
// this will be printed on the console and should not crash
RxJavaCommonPlugins.onError(new TestException("Forced failure 3"));
assertEquals(1, list.size());
assertUndeliverableTestException(list, 0, "Forced failure");
} finally {
RxJavaCommonPlugins.reset();
Thread.currentThread().setUncaughtExceptionHandler(null);
}
}
项目:RxJava3-preview
文件:ScheduledRunnableTest.java
@Test
public void pluginCrash() {
Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
throw new TestException("Second");
}
});
CompositeDisposable set = new CompositeDisposable();
final ScheduledRunnable run = new ScheduledRunnable(new Runnable() {
@Override
public void run() {
throw new TestException("First");
}
}, set);
set.add(run);
try {
run.run();
fail("Should have thrown!");
} catch (TestException ex) {
assertEquals("Second", ex.getMessage());
} finally {
Thread.currentThread().setUncaughtExceptionHandler(null);
}
assertTrue(run.isDisposed());
assertEquals(0, set.size());
}
项目:BetterRandom
文件:LooperThreadTest.java
@Test public void testDefaultUncaughtExceptionHandler() throws InterruptedException {
final AtomicBoolean defaultHandlerCalled = new AtomicBoolean(false);
final UncaughtExceptionHandler oldHandler = Thread.getDefaultUncaughtExceptionHandler();
try {
Thread.setDefaultUncaughtExceptionHandler(
(thread, throwable) -> defaultHandlerCalled.set(true));
final FailingLooperThread failingThread = new FailingLooperThread();
failingThread.start();
failingThread.join();
Thread.sleep(1000);
assertTrue(defaultHandlerCalled.get());
} finally {
Thread.setDefaultUncaughtExceptionHandler(oldHandler);
}
}
项目:letv
文件:jt.java
private Set<UncaughtExceptionHandler> c() {
Set<UncaughtExceptionHandler> keySet;
synchronized (this.c) {
keySet = this.c.keySet();
}
return keySet;
}
项目:letv
文件:jt.java
private void a(Thread thread, Throwable th) {
for (UncaughtExceptionHandler uncaughtException : c()) {
try {
uncaughtException.uncaughtException(thread, th);
} catch (Throwable th2) {
}
}
}
项目:s-store
文件:ThreadUtil.java
/**
* Have shutdown actually means shutdown. Tasks that need to complete should use
* futures.
*/
public static ScheduledThreadPoolExecutor getScheduledThreadPoolExecutor(String name, UncaughtExceptionHandler handler, int poolSize, int stackSize) {
// HACK: ScheduledThreadPoolExecutor won't let use the handler so
// if we're using ExceptionHandlingRunnable then we'll be able to
// pick up the exceptions
Thread.setDefaultUncaughtExceptionHandler(handler);
ThreadFactory factory = getThreadFactory(name, handler);
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(poolSize, factory);
executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(false);
executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
return executor;
}
项目:s-store
文件:ThreadUtil.java
public static ThreadFactory getThreadFactory(final String name, final UncaughtExceptionHandler handler) {
return new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(null, r, name, 1024*1024);
t.setDaemon(true);
t.setUncaughtExceptionHandler(handler);
return t;
}
};
}
项目:WordnetLoom
文件:Application.java
private void initialise() {
Thread managers = new Thread(() -> {
List<Lexicon> lexicons = RemoteService.lexiconServiceRemote.findAll();
LexiconManager.getInstance().loadLexicons(lexicons);
// LexiconManager.getInstance().loadLexicons(RemoteService.lexiconServiceRemote.findAll());
PartOfSpeechManager.getInstance();
DomainManager.getInstance();
List<RelationType> relations = RemoteService.relationTypeRemote.findAll();
RelationTypeManager.getInstance().loadRelationTypes(relations);
// RelationTypeManager.getInstance().loadRelationTypes(RemoteService.relationTypeRemote.findAll());
start();
}, "Mangers Thread");
managers.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
private boolean first = true;
@Override
public void uncaughtException(Thread t, Throwable tt) {
if (first) {
SwingUtilities.invokeLater(() -> {
JOptionPane.showMessageDialog(null,
Messages.ERROR_UNABLE_TO_CONNECT_TO_SERVER,
Application.PROGRAM_NAME_VERSION,
JOptionPane.ERROR_MESSAGE);
});
first = false;
}
try {
Thread.sleep(13000);
} catch (InterruptedException e) {
}
System.exit(1);
}
});
managers.start();
}
项目:homunculus
文件:UnbreakableCrashHandler.java
/**
* Install your delegated exception handler. You will be called by all threads, which have been crashed.
* If this was the main looper, you will be posted. So usually you want to inspect your scopes and
* send the user to some info UIS. See also {@link UnbreakableCrashHandler}
*
* @param handler the crashing callback, always invoked from the main thread (posted at any time in the future after the crash)
*/
public void install(Context context, @Nullable UncaughtExceptionHandler handler) {
mAppContext = context;
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
print(e);
resurrect(t, e, handler);
}
});
}
项目:homunculus
文件:UnbreakableCrashHandler.java
protected void recursiveDispatch(Scope root, Thread t, Throwable e) {
root.forEachEntry(entry -> {
if (entry.getValue() instanceof UncaughtExceptionHandler) {
((UncaughtExceptionHandler) entry.getValue()).uncaughtException(t, e);
}
return true;
});
root.forEachScope(scope -> {
recursiveDispatch(scope, t, e);
return true;
});
}
项目:OpenJSharp
文件:ForkJoinPool.java
/**
* Callback from ForkJoinWorkerThread constructor to establish and
* record its WorkQueue.
*
* @param wt the worker thread
* @return the worker's queue
*/
final WorkQueue registerWorker(ForkJoinWorkerThread wt) {
UncaughtExceptionHandler handler;
wt.setDaemon(true); // configure thread
if ((handler = ueh) != null)
wt.setUncaughtExceptionHandler(handler);
WorkQueue w = new WorkQueue(this, wt);
int i = 0; // assign a pool index
int mode = config & MODE_MASK;
int rs = lockRunState();
try {
WorkQueue[] ws; int n; // skip if no array
if ((ws = workQueues) != null && (n = ws.length) > 0) {
int s = indexSeed += SEED_INCREMENT; // unlikely to collide
int m = n - 1;
i = ((s << 1) | 1) & m; // odd-numbered indices
if (ws[i] != null) { // collision
int probes = 0; // step by approx half n
int step = (n <= 4) ? 2 : ((n >>> 1) & EVENMASK) + 2;
while (ws[i = (i + step) & m] != null) {
if (++probes >= n) {
workQueues = ws = Arrays.copyOf(ws, n <<= 1);
m = n - 1;
probes = 0;
}
}
}
w.hint = s; // use as random seed
w.config = i | mode;
w.scanState = i; // publication fence
ws[i] = w;
}
} finally {
unlockRunState(rs, rs & ~RSLOCK);
}
wt.setName(workerNamePrefix.concat(Integer.toString(i >>> 1)));
return w;
}
项目:OpenJSharp
文件:ForkJoinPool.java
/**
* Creates a {@code ForkJoinPool} with the given parameters, without
* any security checks or parameter validation. Invoked directly by
* makeCommonPool.
*/
private ForkJoinPool(int parallelism,
ForkJoinWorkerThreadFactory factory,
UncaughtExceptionHandler handler,
int mode,
String workerNamePrefix) {
this.workerNamePrefix = workerNamePrefix;
this.factory = factory;
this.ueh = handler;
this.config = (parallelism & SMASK) | mode;
long np = (long)(-parallelism); // offset ctl counts
this.ctl = ((np << AC_SHIFT) & AC_MASK) | ((np << TC_SHIFT) & TC_MASK);
}
项目:OpenJSharp
文件:ForkJoinPool.java
/**
* Creates and returns the common pool, respecting user settings
* specified via system properties.
*/
private static ForkJoinPool makeCommonPool() {
int parallelism = -1;
ForkJoinWorkerThreadFactory factory = null;
UncaughtExceptionHandler handler = null;
try { // ignore exceptions in accessing/parsing properties
String pp = System.getProperty
("java.util.concurrent.ForkJoinPool.common.parallelism");
String fp = System.getProperty
("java.util.concurrent.ForkJoinPool.common.threadFactory");
String hp = System.getProperty
("java.util.concurrent.ForkJoinPool.common.exceptionHandler");
if (pp != null)
parallelism = Integer.parseInt(pp);
if (fp != null)
factory = ((ForkJoinWorkerThreadFactory)ClassLoader.
getSystemClassLoader().loadClass(fp).newInstance());
if (hp != null)
handler = ((UncaughtExceptionHandler)ClassLoader.
getSystemClassLoader().loadClass(hp).newInstance());
} catch (Exception ignore) {
}
if (factory == null) {
if (System.getSecurityManager() == null)
factory = defaultForkJoinWorkerThreadFactory;
else // use security-managed default
factory = new InnocuousForkJoinWorkerThreadFactory();
}
if (parallelism < 0 && // default 1 less than #cores
(parallelism = Runtime.getRuntime().availableProcessors() - 1) <= 0)
parallelism = 1;
if (parallelism > MAX_CAP)
parallelism = MAX_CAP;
return new ForkJoinPool(parallelism, factory, handler, LIFO_QUEUE,
"ForkJoinPool.commonPool-worker-");
}
项目:VoxelGamesLibv2
文件:LoggedUncaughtExceptionHandler.java
static void enable(@Nonnull Bugsnag bugsnag) {
UncaughtExceptionHandler currentHandler = Thread.getDefaultUncaughtExceptionHandler();
// Find or create the Bugsnag ExceptionHandler
LoggedUncaughtExceptionHandler bugsnagHandler;
if (currentHandler instanceof LoggedUncaughtExceptionHandler) {
bugsnagHandler = (LoggedUncaughtExceptionHandler) currentHandler;
} else {
bugsnagHandler = new LoggedUncaughtExceptionHandler(currentHandler);
Thread.setDefaultUncaughtExceptionHandler(bugsnagHandler);
}
// Subscribe this bugsnag to uncaught exceptions
bugsnagHandler.clientMap.put(bugsnag, true);
}
项目:VoxelGamesLibv2
文件:LoggedUncaughtExceptionHandler.java
static void disable(@Nonnull Bugsnag bugsnag) {
// Find the Bugsnag ExceptionHandler
UncaughtExceptionHandler currentHandler = Thread.getDefaultUncaughtExceptionHandler();
if (currentHandler instanceof LoggedUncaughtExceptionHandler) {
// Unsubscribe this bugsnag from uncaught exceptions
LoggedUncaughtExceptionHandler bugsnagHandler = (LoggedUncaughtExceptionHandler) currentHandler;
bugsnagHandler.clientMap.remove(bugsnag);
// Remove the Bugsnag ExceptionHandler if no clients are subscribed
if (bugsnagHandler.clientMap.size() == 0) {
Thread.setDefaultUncaughtExceptionHandler(bugsnagHandler.originalHandler);
}
}
}
项目:boohee_v5.6
文件:WebSocketServer.java
public WebSocketWorker() {
setName("WebSocketWorker-" + getId());
setUncaughtExceptionHandler(new UncaughtExceptionHandler(WebSocketServer.this) {
public void uncaughtException(Thread t, Throwable e) {
Thread.getDefaultUncaughtExceptionHandler().uncaughtException(t, e);
}
});
}
项目:jdk8u-jdk
文件:ForkJoinPool.java
/**
* Callback from ForkJoinWorkerThread constructor to establish and
* record its WorkQueue.
*
* @param wt the worker thread
* @return the worker's queue
*/
final WorkQueue registerWorker(ForkJoinWorkerThread wt) {
UncaughtExceptionHandler handler;
wt.setDaemon(true); // configure thread
if ((handler = ueh) != null)
wt.setUncaughtExceptionHandler(handler);
WorkQueue w = new WorkQueue(this, wt);
int i = 0; // assign a pool index
int mode = config & MODE_MASK;
int rs = lockRunState();
try {
WorkQueue[] ws; int n; // skip if no array
if ((ws = workQueues) != null && (n = ws.length) > 0) {
int s = indexSeed += SEED_INCREMENT; // unlikely to collide
int m = n - 1;
i = ((s << 1) | 1) & m; // odd-numbered indices
if (ws[i] != null) { // collision
int probes = 0; // step by approx half n
int step = (n <= 4) ? 2 : ((n >>> 1) & EVENMASK) + 2;
while (ws[i = (i + step) & m] != null) {
if (++probes >= n) {
workQueues = ws = Arrays.copyOf(ws, n <<= 1);
m = n - 1;
probes = 0;
}
}
}
w.hint = s; // use as random seed
w.config = i | mode;
w.scanState = i; // publication fence
ws[i] = w;
}
} finally {
unlockRunState(rs, rs & ~RSLOCK);
}
wt.setName(workerNamePrefix.concat(Integer.toString(i >>> 1)));
return w;
}