线程是并发编程的根底元素,是系统调度的最小单元,现代的jvm直接对应了内核线程。为了降低并发编程的门槛,go语言引入了协程。
你好,我是李福春,我在准备面试,今天的标题是?
一个线程两次调用start()办法会发作什么?
答:线程两次调用start()办法会抛出IllegalThreadStateException,这是一种运行时反常。
接下来针对面试官或许深挖的内容做一些扩展。
线程的存储结构
重点说一下ThreadLocal,这个是线程私有空间,供给了一种保存线程私有信息的机制。
整个线程的生命周期中有效。
能够在线程关联的各个模块之间传递信息,比方常见的三层模型,controller,service,dao之间能够传递线程私有的一些透传信息,比方事务id,跟踪id等。
ThreadLocal的源码比较简单,内部使用了一个基于弱引用的ThreadLocalMap,key是线程,value是正常值。
需求留意的是,在作业线程中必须显现的清理,否则简单引发oom问题。
线程的生命周期
线程的状况直接查看源码,java.lang.Thread.State;
图中很清楚的说明晰状况变迁的驱动办法。
线程的其它办法
创立线程的长处:
1,不受单继承的限制,更灵活。
2,重用代码完成方便,更简单复用。
3,跟Executor框架能够更好的集成。
看护线程
应用需求一个长期主流的服务,可是不期望影响进程的退出。
必须在线程发动之前设置,即start办法调用之前,设置办法thread.setDaemon(true);
线程反常唤醒
使用while句子替换if句子,避免线程被反常唤醒
其它办法
等候办法:join(等候执行完毕),yield(告知调度器,主动让出cpu)
wait,notify,notifyall,供给了进程的同步协作东西,可是有了并发包之后,不再需求。
小结
本篇答复了一个常规面试问题,线程两次start会发作什么?然后从线程的存储,线程的状况充沛认识了线程这个系统基本调度单元。
广州天河区珠江新城富力盈力大厦北塔2706
020-38013166(网站咨询专线)
400-001-5281 (售后服务热线)
品牌服务专线:400-001-5281
长沙市天心区芙蓉中路三段398号新时空大厦5楼
联系电话/ (+86 0731)88282200
品牌服务专线/ 400-966-8830
旗下运营网站:
Copyright © 2016 2024澳门原料网1688白老虎,保留所有权利。 粤ICP备09033321号