2017年11月26日
摘要:
调用该方法的线程进入等待状态,只有等待另外线程的通知或被中断才会返回。 注意:调用wait()方法之后,会释放对象锁。
阅读全文
posted @ 2017-11-26 21:56
飞奔的菜鸟
阅读(149)
推荐(0)
摘要:
中断操作是一种简便的线程间交互的方式,这种交互方式最适合用来取消或者停止任务。除了中断外,还能利用一个boolean变量来控制是否需要停止并终止该线程。例如:
阅读全文
posted @ 2017-11-26 21:41
飞奔的菜鸟
阅读(183)
推荐(0)
摘要:
在调用suspend()方法之后,线程不会释放已经占有的资源(比如锁),而是占有着资源进入睡眠状态,这样容易死锁。同样stop()方法在终结一个线程时不会保证线程的资源正确释放,通常是没有给予线程完成资源释放工作的机会,会导致程序可能工作在不确定状态下。
阅读全文
posted @ 2017-11-26 21:17
飞奔的菜鸟
阅读(341)
推荐(0)
2017年11月25日
摘要:
许多方法声明抛出InterruptedException(例如Thread.sleep()),这些方法在抛出InterruptedException之前,Java虚拟机会先将该线程的中断标识位清除,然后抛出InterruptedException,此时调用isInterrupted()方法将会返回f
阅读全文
posted @ 2017-11-25 16:31
飞奔的菜鸟
阅读(152)
推荐(0)
摘要:
Daemon线程是一种支持型线程,主要被用作程序中后台调度以及支持性工作。就是说,当一个Java虚拟机中不存在非Daemon线程的时候,Java虚拟机将会退出,此时Java虚拟机中的所有Daemon线程都需要立即终止。可以通过调用Thread.setDaemon(true)将线程设为Daemon线程
阅读全文
posted @ 2017-11-25 15:09
飞奔的菜鸟
阅读(446)
推荐(0)
2017年11月23日
摘要:
双重检查锁定的延时初始化: 双重检查锁定看起来似乎很完美,但这是一个错误的优化!执行程序读取到第5行instance不为空时,instance引用的对象可能还没有完成初始化。 程序第8行所做的操作如下: 1:分配对象的内存空间 2:初始化对象 3:设置instance指向刚分配的内存地址 步骤2和3
阅读全文
posted @ 2017-11-23 21:11
飞奔的菜鸟
阅读(385)
推荐(0)
摘要:
intra-thread semantics 保证重排序不会改变单线程内的程序执行结果。 换句话说,intra-thread semantics 允许那些在单线程内,不会改变单线程程序执行结果的重排序。
阅读全文
posted @ 2017-11-23 20:41
飞奔的菜鸟
阅读(903)
推荐(1)
摘要:
对于final域,编译器和处理器要遵守两个重要的重排序规则: 1:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 2:初次读一个包含final域的对象的引用,与随后初次都这个final域,这两个操作之间不能重排序。 对于引用类型。写f
阅读全文
posted @ 2017-11-23 19:55
飞奔的菜鸟
阅读(185)
推荐(0)
2017年11月22日
摘要:
理解volatile特性的一个好方法是吧对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。 即使是64位的long型和double型变量,只要它是volatile变量,对这些变量的读/写就具有原子性。 如果是多个volatile操作或类似于volatile++这种复
阅读全文
posted @ 2017-11-22 22:58
飞奔的菜鸟
阅读(224)
推荐(0)
摘要:
每次处理器和内存之间的数据传递都是通过一系列步骤来完成的,这一系列步骤称之为总线事务。 总线事务包括读事务和写事务。
阅读全文
posted @ 2017-11-22 20:53
飞奔的菜鸟
阅读(1130)
推荐(0)