java知识汇总
基础篇
线程
-
创建线程的方式及实现
继承thread类,实现runnable接口,使用callable和future创建线程 使用线程池来创建例如Executor框架 -
sleep() 、join()、yield()有什么区别
sleep会让线程进入阻塞状态,但是不会释放锁 wait方法需要和notify以及notifyall一起使用,必须在synchronized语句块 内使用 yield和sleep类似也不会释放锁,区别在于它没有参数,使当前线程重新回到可 执行状态 join方法会使得当前线程等待调用join方法的线程结束后才能执行 -
ThreadLocal 原理分析
每个线程内都有自己的实例副本,该副本只能由当前线程来使用,不存在多线程内的共享 -
讲讲线程池的实现原理
executors.newFixedThreadPool(10)初始化包含10个线程的线程池 通过executor.excute方法来提交任务 核心线程数(超过核心线程数的任务将被保存到阻塞队列) 最大线程数(线程池中允许的最大线程数) 线程存活时间(线程空闲时的存活时间) unit(存活时间的单位) workqueue 保存等待被执行的任务的阻塞队列,且任务必须实现runnable接口,ArrayBlockQueue和 linkBlockQueue -
线程池的几种方式
newFixedThreadPool(10) 指定线程数的线程池 newCachedThreadPool 可缓存线程的线程池 newSingleThreadExecutor 单线程线程池 newScheduledThreadPool 指定时间内周期性的执行提交的任务 -
线程的生命周期
新建,就绪,运行,阻塞和死亡五个状态 新建一个线程时此线程进入新建状态 线程被启动,等待被分配给cpu时间片,正在就绪队列中排队等候获取cpu资源 获取cpu资源正在被执行(run方法) 由于某种原因正在运行的线程让出cpu并暂停自己的执行,进入阻塞状态 线程执行完毕或者被其他线程杀死进入死亡状态