Java多线程之建议和问题
建议
1. 给线程取个好名字,好的名字有助于识别线程是拿来干什么的。
2. 尽量少使用同步和锁,如果一定要用,就要缩小同步范围:静态块或Lock
3. 多用同步类,少用wait(),wait(),常用同步类有:CountDownLatch,Semaphone,CyclicBarrier
4. 多用并发集合,少用同步集合
总结
1. 多线程之间的数据要分类开,避免使用全局变量(共享数据)
2. 如果多线程一定要用共享数据,那一定要做好读写保护(临界区、互斥、加锁)
3. 确定你知道你的线程状态,不要径自结束程序而不等待他们结束
4. 千万不要在一个临界区中调用 sleep 或 wait 函数,不要长时间锁住资源
5. 线程之间的通讯,可以通过互斥消息解决,当然这时工作线程要自己內建消息循环,接收处理消息。
多线程问题
1. 一个线程运行中抛异常会怎样?
线程会自己死掉,不会影响其他线程。
解决方法:
- 在run()中加try catch
- 用UncaughtExceptionHandler接口
2. 三个线程T1、T2、T3如何有顺序得执行
利用join(),调用的方式是,T3中调用T2.join(),T2中调用T1.join(),这样的执行顺序就会是T1,T2,T3
3. 检查一个线程是否拥有锁
Thread.holdsLock() = true;
面试题
网上一大把
http://www.importnew.com/12773.html
http://ifeve.com/15-java-faq/
http://www.cnblogs.com/dolphin0520/p/3932934.html
http://www.cnblogs.com/fingerboy/p/5352880.html