Java面试总结-基础篇1
java多线程-- 自旋锁,偏向锁 好处:可以举Servlet和CGI的对比用户线程和守护线程的区别:用户线程结束后JVM会退出,然后守护线程才会终止(比如垃圾回收线程),如何在java中创建守护线程创建方法:推荐Runnable接口;继承Thread;Callable(可返回值,与Future配合使用实现异步) 示例生命周期:New,Runnable,Running,Waiting,Blocked(join方法),Dead (见下图)优先级:比较依赖OS的线程调度器,所以最好用自己的代码控制上下文切换(context-switching):存储和回复CPU状态确保main线程最后终止:join方法线程间通信:wait,notify,notifyAll(主要还是线程间锁的控制)Thread的方法:sleep和yield是静态的,因为只能在正在执行的线程执行 线程安全 如何确保线程安全:原子类,并发锁,volatile关键字 参考链接同步块和同步方法:倾向同步块,锁的更少ThreadLocal:不想很麻烦的使用同步全局变量机制时,可以使用死锁:排查方法(blocked的线程锁住的资源id),java thread dump避免死锁:避免嵌套锁,只在需要的地方使用锁,避免无限期等待原子操作:多线程下避免数据不一致(AtomicInteger等类),int+