志在指尖
用双手敲打未来

线程两次start()会发生什么?

线程是并发编程的根底元素,是系统调度的最小单元,现代的jvm直接对应了内核线程。为了降低并发编程的门槛,go语言引入了协程。
你好,我是李福春,我在准备面试,今天的标题是?
一个线程两次调用start()办法会发作什么?
答:线程两次调用start()办法会抛出IllegalThreadStateException,这是一种运行时反常。
接下来针对面试官或许深挖的内容做一些扩展。
线程的存储结构
重点说一下ThreadLocal,这个是线程私有空间,供给了一种保存线程私有信息的机制。
整个线程的生命周期中有效。
能够在线程关联的各个模块之间传递信息,比方常见的三层模型,controller,service,dao之间能够传递线程私有的一些透传信息,比方事务id,跟踪id等。
ThreadLocal的源码比较简单,内部使用了一个基于弱引用的ThreadLocalMap,key是线程,value是正常值。
需求留意的是,在作业线程中必须显现的清理,否则简单引发oom问题。
线程的生命周期
线程的状况直接查看源码,java.lang.Thread.State;
图中很清楚的说明晰状况变迁的驱动办法。java
线程的其它办法
创立线程的长处:
1,不受单继承的限制,更灵活。
2,重用代码完成方便,更简单复用。
3,跟Executor框架能够更好的集成。
看护线程
应用需求一个长期主流的服务,可是不期望影响进程的退出。
必须在线程发动之前设置,即start办法调用之前,设置办法thread.setDaemon(true);
线程反常唤醒
使用while句子替换if句子,避免线程被反常唤醒
其它办法
等候办法:join(等候执行完毕),yield(告知调度器,主动让出cpu)
wait,notify,notifyall,供给了进程的同步协作东西,可是有了并发包之后,不再需求。
小结
本篇答复了一个常规面试问题,线程两次start会发作什么?然后从线程的存储,线程的状况充沛认识了线程这个系统基本调度单元。

未经允许不得转载:IT技术网站 » 线程两次start()会发生什么?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载