摘要:
在有关java线程的讨论中,一个常不正确的知识是:“原子操作不需要同步控制”。原子操作是不能被线程调度戒指中断的操作;一旦操作开始,那么它一定可以在可能发生的“上下文切换”之前执行完毕。依赖于原子性是很棘手而且是很危险的。 原子性可以应用于除了long和double之外的所有基本类型之上的“简单操作 阅读全文
摘要:
由于线程的本质特性,使得你不能捕获从线程中逃逸的异常,一旦异常逃出run()方法,他就会向外传播到控制台。除非采取特殊的步骤去捕获这种错误的异常,在JDK1.5以前,可以只用线程组来捕获,但在这之后,可以使用Executor来解决这个问题,下面示例如下: 输出结果: 如果加上try..catch也不 阅读全文
摘要:
所谓守护线程(DaemonThread),是指在程序运行的时候在后台提供的一种通用的服务线程,并且这种线程并不属于程序中不可或缺的一部分。因此,当所有非守护线程(前台线程)都结束时,程序也就终止了。同时会杀死所有的后台线程,反过来说,只要又任何非守护线程还在执行,程序就不会终止,比如main()方法 阅读全文
摘要:
输出结果: 阅读全文
摘要:
1:Executor接口 2:ExecutorService接口 方法api: 下面通过实例来理解上述方法: 输出结果: 说明的第一个问题是:isShutdown()方法仅仅只是判断ExecutorService是否已经调用或shutDown()方法,如果是就返回true,否则返回false.而is 阅读全文
摘要:
1:饿汉模式: 输出结果: 2:懒汉模式: 输出结果: 3:静置内部类: 输出结果 4:如果要保证对象序列化后仍然保持单利,那么代码如下: 输出结果: 5:使用静态代码块实现单利 输出结果: 阅读全文
摘要:
翻译如下: 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。 如果只读数据,可以很多人同时读,但不能同时写,那就上读锁; 如果修改数据,只能有一个人在写,且不能同时读取,那就上写锁。 总之,读的时候上读锁,写的时候上写锁! ReentrantR 阅读全文
摘要:
Condition共有一下几个api: awaitNanos()api: 翻译如下: 阅读全文
摘要:
Lock接口提供了三种获取锁的能力。可中断,不可中断,定时。api文档如下: 输出结果:正常运行完毕,没有收到异常信息。 如果代码改为如下:那么会发生异常: 输出结果: 输出结果:可中断的异常能够接收到异常信息 输出结果: 分析:线程a获取锁时,锁是空闲的,那么会立即返回true.当线程b尝试获取锁 阅读全文
摘要:
公平锁与非公平锁:公平锁代表获取锁的顺序时按照加入锁的顺序来分配的,即按照FIFO(first in first out)的顺序来的,而非公平锁就时一种抢占式,是随机分配的。不一定先到先地。这就有可能导致某些线程一致获取不到锁。 输出结果: 如果改为: 输出结果: 可见不是按照FIFO来进行分配地。 阅读全文