java 多线程以及线程池

Posted shunyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 多线程以及线程池相关的知识,希望对你有一定的参考价值。

1.多线程可以使程序反应更快,交互性更强,执行效率最高。

2.创建一个线程:  要实现Runnable 接口,创建Thread类的对象,用start开始执行线程。

3.使用Thread中的yield()方法为其他线程临时让出CPU时间。

4.sleep()方法可以将线程设置为休眠状态以确保其他线程执行。休眠时间为毫秒数·。

 sleep()方法可能抛出一个InterruptedException.这是一个必捡异常。需要try-catch块中。

5.java为每个线程都设置一个优先级。默认情况下,线程继承他的线程的优先级。可以用setPriorty方法提高或者降低优先级。还可以用getPriorty方法获取优先级。

 优先级是1-10的数字。MIN_PRIORITY,NORM_PRIORITY,MAX_PRIORITY,分别代表1,5,10.

 主线程的优先级是Thread.NORM_PRIORITY。

 如果,线程的优先级相同,那么将会用循环队列给他们分配相同的CPU份额。被称为   循环调度。

6.Thread中还包含 stop(),suspend(),resume()。方法,但是存在不安全因素。不提倡使用这些方法。

 

使用线程池的好处

1.通过重复利用已创建的线程, 减少在创建和销毁线程上所花的时间以及系统资源的开销。

2.提高响应速度。 当任务到达时, 任务可以不需要等到线程创建就可以立即行。

3.提高线程的可管理性。 使用线程池可以对线程进行统一的分配和监控。

4.如果不使用线程池, 有可能造成系统创建大量线程而导致消耗完系统内存。

 

线程池的注意事项

虽然线程池是构建多线程应用程序的强大机制, 但使用它并不是没有风险的。

(1) 线程池的大小。 多线程应用并非线程越多越好, 需要根据系统运行的软硬件环境以及应用本身的特点决定线程池的大小。 一般来说, 如果代码结构合理的话, 线程数目与 CPU数量相适合即可。 如果线程运行时可能出现阻塞现象, 可相应增加池的大小; 如有必要可采用自适应算法来动态调整线程池的大小, 以提高 CPU 的有效利用率和系统的整体性能。

(2) 并发错误。 多线程应用要特别注意并发错误, 要从逻辑上保证程序的正确性, 注意避免死锁现象的发生。

(3) 线程泄漏。 这是线程池应用中一个严重的问题, 当任务执行完毕而线程没能返回池中就会发生线程泄漏现象。

 

以上是关于java 多线程以及线程池的主要内容,如果未能解决你的问题,请参考以下文章

java面试:多线程与并发

Java线程池

Java线程池在运行后的结果反查

nodejs线程池能分配多少线程

可缓存线程池newCachedThreadPool

Windows 线程池