- 浏览: 23443 次
- 来自: ...
最新评论
-
小飞279:
"直接在main方法里执行,在console里是不会 ...
Java UncaughtExceptionHandler接口 -
headof:
主线程的Thread.start抛出的RuntimeExcep ...
Java UncaughtExceptionHandler接口 -
CEOandy521:
"在有线程的情况下。对于主线程是无法捕获Thread ...
Java UncaughtExceptionHandler接口
文章列表
ConcurrentLinkedQueue是Queue的一个安全实现.Queue中元素按FIFO原则进行排序.采用CAS操作,来保证元素的一致性.
数据结构为:单向链表.
变量使用volatile修改,保证内在可见性(happens-before,对变量的写操作对后续的读操作是可见的),同样也不会导致CPU指令的重排序.
private static class Node<E> {
volatile E item;
volatile Node<E> next;
/**
* Const ...
Queue
抛出异常返回特殊值 插入add(e)offer(e) 移除remove()poll()
Deque继承Queue(double ended queue(双端队列))
第一个元素(头部)最后一个元素(尾部)插入addFirst(e)offerFirst(e)addLast(e) offerLast(e) 移除removeFirst()pollFirst()removeLast() pollLast() 检查getFirst() peekFirst()getLast() peekLast()
Queue 方法 等效 Deque 方法 add(e) addLast(e) off ...
一.什么是线程安全(what).
一个类是线程安全的,当被多个线程访问时,类可以持续保证行为的正确性.
自增操作看上去是一个单独操作,然而他对于多线程来说并不是线程安全的.这个现象比较容易出现,请参照以下代码.
private int a;
@Test
public void test() throws Exception {
CountDownLatch latch = new CountDownLatch(2);
Thread t1 = new Thread(new task(latch), "t1");
Thread ...
ThreadFactory接口,只有一个public方法 newThread。
继承这个接口,可以自己的ThreadFactory,此例为Thread添加一个自己的前缀。
DaemonThreadFactory
/**
*
*/
public class DaemonThreadFactory implements ThreadFactory {
//
private String prefix;
private volatile int threadId;
/**
*
* @param prefix
*/
...
FutureTask
仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算。
建立个callable。返回一个string
static class nCallable implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("now,this callable is calculating...");
return "s ...
Log4j有三个主要组件,loggers, appenders and layouts. 三个类型的组件通过message type and level 相关协调可以让开发者记录log messages.
Logger层
对于logging api超越普通的System.out.println首先也就是最重要的好处他能够禁用某些日志语句,同时允许其他人可以正常print.这种能力假设为loggin space.也就说是所以可能的logging statement的space,是根据一些开发者选择的标准进行分类.这一观察使得我们选择类别作以包的中心开概念.然而,在log4j version1.2 ...
能够有选择性地启用或禁用基于他们的记录器的日志请求只是picture的一部分。Log4j允许loggin请求打印到多个目的地。对于Log4j而言,一个输出的destination称为一个appender,目前,控制台,文件,GUI组件,远程套接字服务器,JMS,NT事件记录器,以及远程UNIX系统日志守护进程是已经存在的appender。它也可以异步log。
logger可以连接多个appender
addAppender方法添加一个appender到一个给定的记录器。不但每启用一个给定的logger 记录的请求将被转发到在这个logger所有的appender中而且会在较高的层次appende ...
UncaughtExceptionHandler接口用来捕获运行时未被程序捕获异常.
如下面的例子.
for (int i=5;i >=0 ;i--) {
int value = 5 / i;
System.out.println(value);
}
直接在main方法里执行,在console里是不会报错的.
但仔细看一下代码会发现,当i为0时此处代码应该抛ArithmeticException.为何没有,是因为程序中没有任何异常catch.
如果在main方法中加入
Thread.setDefaultUncaughtExceptionHandle ...