一、创建线程有哪几种方式
二、为什么不建议Executors来创建线程池
三、线程池有哪几种状态,分别来表示什么
四、Sychronized和ReenTrantLock有什么区别
五、ThreadLocal 有哪些应用场景
六、ReenTrantLock 公平锁和非公平锁,底层是如何实现的
七、Synchronized 锁的升级是怎样的;
八、Tomcat中为什么要有自定义加载器
九、面向对象
十、JDK、JRE、JVM区别和联系
总结
extends Thread;
implement Runable;
implement Callable; FutureTask()->new Thead(); task.get()
Executors;
都是基于Runable;
使用无界阻塞队列,可能会导致OOM;
Running:可运行状态,正常运行任务,接受新任务;
Shutdown:停止接收任务,将队列 中的任务执行完;
Stop: shutdownnow,中断正在运行的任务,不会将队列中的任务执行完;
Tidying: 线程池都tidying ,terminated();
terminated:
1、java关键字,jdk的类;
2、jvm 层面,api;
3、自动释放锁,手动释放锁;
4、非公平锁,非公平和公平锁;
5、锁升级,锁不升级;
1、传递变量保证线程安全;
2、数据库连接;
3、注意:Thread下都有ThreadLocalMap,是ThreadLocal 内部类,Key值是弱引用,在多线程下Entry 可能会造成内存泄漏,手动释放remove;
公平锁和非公平锁:加锁是否需要先排队(AQS队列);
唤醒是没有区别的;
偏向锁:对象头有一个线程ID,可重入;
轻量级锁:有另外 一个线程来竞争,通过自旋方式,不阻塞线程;
重量级锁:自旋次数过多,升级重量级锁,会阻塞线程;
自旋:一直判断锁的状态;
1、方法区通过类的唯一标识,可以使用类加载器去做区别;
2、热加载的机制;
面向过程:打开洗衣机 -> 放衣服 -> 放洗衣粉-> 清洗 -> 烘干;
面向对象:区别成对象:人和洗衣机;
优点:易复用,扩展,维护;
JDK: 开发工具;相比jre jconsole ,javac ;
JRE: 运行环境;只需要运行的情况,只需要安装 jre;
JVM: 机器能识别的语言,Window,Linux 不同的JVM , 一处编译到处运行;
上一篇:零死角玩转stm32中级篇1-调试必备串口(UART)
下一篇:Go单元测试