Java采用的是抢占式调度方式。
}
线程声明周期:
新建线程->start()->就绪状态->获取CPU权限->执行->run结束则死亡
如果在执行中被调用了sleep和wait则进入阻塞状态,阻塞状态下调用notify或者sleep时间到则进入就绪状态。
jion方法是自己先执行,其他线程等待。yield方法是放弃优先执行权,如果CPU确实空闲自己也会被执行。
为什么wait和notify不定义在Thread中?
因为wait,notify的方法必须通过锁对象(任意的对象)调用,而锁对象是属于任意的对象(即Object的子类)
线程安全类-查看源码可以看到这些类的函数都是带着synchronized:
StringBuffer,Vector,Hashtable
当然想用同步的也不一定非用Vector不可,
如果想把非同步的ArrayList,HashMap,Set等变为同步的,则只需要通过Collections.sychronizedMap,List,Set等方法即可实现。
long 不能用作switch
而 int、 short、 char 或者 byte都可以自动转化为int所以可以。
long的范围大于int所以不可以。
java7新特性,String可以用于Switch
Lock加锁
private Lock lock = new ReentrantLock();
....
try{
lock.lock();
}finally{
lock.unlock();//防止中间被打断而没有解锁。
}
以上。