
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
线程与线程池的应用都是Java编程开发程序员需要熟练掌握的一些编程技术,而本文我们就通过案例分析来简单了解一下,Java编程线程与线程池的应用分享。
1、线程是什么
操作系统支持多个应用程序并发执行,每个应用程序至少对应一个进程,彼此之间的操作和数据不受干扰,彼此通信一般采用管道通信、消息队列、共享内存等方式。当一个进程需要磁盘IO的时候,CPU就切换到另外的进程,提高了CPU利用率。
有了进程,为什么还要线程?因为进程的成本太高了。
启动新的进程必须分配独立的内存空间,建立数据表维护它的代码段、堆栈段和数据段,这是昂贵的多任务工作方式。线程可以看作轻量化的进程。线程之间使用相同的地址空间,切换线程的时间远小于切换进程的时间。
进程是资源分配的小单位,而线程是CPU调度的小单位。每一个进程中至少有一个线程,同一进程的所有线程共享该进程的所有资源,多个线程可以完成多个不同的任务,也就是我们常说的并发多线程。
2、为什么要使用线程池
使用线程池通常由以下两个原因:
频繁创建销毁线程需要消耗系统资源,使用线程池可以复用线程。
使用线程池可以更容易管理线程,线程池可以动态管理线程个数、具有阻塞队列、定时周期执行任务、环境隔离等。
3、线程池工作原理
线程池的工作原理,简单理解如下:
当往线程池中提交任务的时候,会先判断线程池中线程数是否是核心线程数,如果小于,会创建核心线程并执行任务。
如果线程数大于核心线程数,会判断阻塞队列是否已满,如果没有满,会把任务添加到阻塞队列中等待调度执行。
如果阻塞队列已满,会判断线程数是否小于大线程数,如果小于,会继续创建大线程数并执行任务。
如果线程数大于大线程数,会执行拒绝策略,然后结束。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。