20190315:原子操作.
原子:本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。线程之间保证原子操作可以用循环CAS(Compare and Swap)的方式。
20190402:synchronized加到static静态方法上是给class类上锁,加到非静态方法上是给对象上锁。synchronized static 等同于 synchronized(xxx.class){ }
20190403:内存泄漏(memory leak)
内存泄漏指堆中分配了内存给他,但是由于某些原因该内存一直无法释放,长期占用。一般发生在C中,java中单例模式比较容易出现这个问题。
20190403:线程间通信
线程是操作系统中独立的个体,但这些 个体如果不经过特殊的处理,就不能成为一个整体,所以需要线程间通信。
每一个锁对象都有两个队列,一个是就绪队列,一个是阻塞队列。就绪队列存储了将要获得锁的线程,阻塞队列存储了被阻塞的线程。
wait()被执行后锁自动释放,notify()执行后锁却不会自动释放。
20190404:线程间join()
join()的作用是等待线程对象销毁,用途:使会提前结束的线程等待处理时间较长的线程。即主线程等待子线程执行完毕,在继续主线程执行。
join 与 synchronize 区别在于,join是内部使用wait()进行等待,synchronize 使用的是“对象监视器”原理作为同步。