进程:一个程序,例如qq.exe
线程:cpu调度的最小单位,程序中不同的执行路径
实现多线程的2中方式: 继承Thread
实现runnable
线程池Executors.newCachedThread
Thread.sleep() 睡眠
join:一个线程等待另一个线程结束后继续执行
Thread.yield() 线程礼让(让出一下cpu,之后任然会被抢到,实际业务中用的很少)
stop:线程停止,实际没人会用
Thread.getState()获得线程当前的状态
线程的状态:
synchronzied 关键字:锁 (既保证原子性又保证可见性,可重入锁)
可重入锁:加锁方法内存调用该对象其他加锁方法,是可以的,不会锁住,叫做可重入锁
volitaile 保证可见性,禁止指令重拍,但是不保证原子性,所有需要用到unsafe类下automic的原子类
hotspot底层实现 对象头(64位),拿出2位表示是否被锁定