这里只是提一些值得注意的点,具体深入还需要看相关的书籍和资料
关于运行状态:
线程运行有6个状态:NEW、Runnable、Waiting、Time_Waited、Blocked、Terminated
只有Synchronized方法和Synchronized方法块才会进入Blocked状态,其他的锁,如ReentrantLock等进入的都是Waiting或Time_Waited状态,因为调用的是LockSupport这个包中的代码。
关于线程中的基本操作
- interrupted
-
yield
yield()让出cpu资源,是让给和yield相同优先级的线程
-
wait()和sleep()
wait()是Object中的方法,实例方法,调用时必须使用实例化调用,会让出CPU资源和锁,使得该线程进入等待池中。wait必须在同步方法或同步块中调用,必须是已经获得对象锁。
sleep()是Thread中的静态资源,可以直接使用,任何地方都可以使用,只会让出cpu资源。
-
守护线程Daemon
设置守护线程应该先于start()方法,否则当作正常的用户线程执行。
守护线程在退出时不会执行finally中的代码,所以将释放资源放入finally块中的行为是不安全的。