java线程和线程池的区别_易语⾔多线程和线程池的区别及优
缺点
⼀个线程的周期分为:bai创建、运du⾏、销毁三个阶段。 处理⼀个任务时,⾸先创建⼀zhi个任务线程dao,然后执⾏任务,完了,销毁线程。⽽线程处于运⾏状态的时候,才是真的在处理我们交给它的任务,这个阶段才是有效运⾏时间。所以,我们希望花在创建和销毁线程的资源越少越好。如果不销毁线程,⽽这个线程⼜不能被其他的任务调⽤,那么就会出现资源的浪费。为了提⾼效率,减少创建和销毁线程带来时间和空间上的浪费,出现了线程池技术。这种技术是在开始就创建⼀定量的线程,批量处理⼀类任务,等待任务的到来。任务执⾏完毕后,线程⼜可以执⾏其他的任务。等不再需要线程的时候,就销毁。这样就省去了频繁创建和销毁线程的⿇烦。
⼀. 线程池简介
1. 线程池的概念:
在⾯向对象编程中,对象创建和销毁是很费时间的,因为创建⼀个对象要获取内存资源或者其它更多资源。线程池,其实就是⼀个容纳多个线程的容器,其中的线程可以反复使⽤,省去了频繁创建线程对象的操作,⽆需反复创建线程⽽消耗过多资源.
线程池就是⾸先创建⼀些线程,它们的集合称为线程池。使⽤线程池可以很好地提⾼性能,线程池在系统启动时即创建⼤量空闲的线程,程序将⼀个任务传给线程池,线程池就会启动⼀条线程来执⾏这个任务,执⾏结束以后,该线程并不会死亡,⽽是再次返回线程池中成为空闲状态,等待执⾏下⼀个任务。
线程池是⼀种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后⾃动启动这些任务。线程池线程都是后台线程。每个线程都使⽤默认的堆栈⼤⼩,以默认的优先级运⾏,并处于多线程单元中。超过最⼤值的线程可以排队,但他们要等到其他线程完成后才启动。
2. 线程池的⼯作机制
在线程池的编程模式下,任务是提交给整个线程池,⽽不是直接提交给某个线程,线程池在拿到任务后,就在内部寻是否有空闲的线程,如果有,则将任务交给某个空闲的线程。
⼀个线程同时只能执⾏⼀个任务,但可以同时向⼀个线程池提交多个任务。
3. 使⽤线程池的原因:
多线程运⾏时间,系统不断的启动和关闭新线程,成本⾮常⾼,会过渡消耗系统资源,以及过渡切换线程的危险,从⽽可能导致系统资源的崩溃。这时,线程池就是最好的选择了。
4、⼀个线程池包括以下四个基本组成部分:
java线程池创建的四种
(1)线程池管理器(ThreadPool):⽤于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务;
(2)⼯作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执⾏任务;
(3)任务接⼝(Task):每个任务必须实现的接⼝,以供⼯作线程调度任务的执⾏,它主要规定了任务的⼊⼝,任务执⾏完后的收尾⼯作,任务的执⾏状态等;
(4)任务队列(taskQueue):⽤于存放没有处理的任务。提供⼀种缓冲机制。
⼆. 线程池优缺点
线程池具有以下优点:
⽤现有线程服务请求⽐等待创建⼀个线程更快。
线程池限制了任何时候可⽤线程的数量。这对那些不能⽀持⼤量并发线程的系统⾮常重要。
将要执⾏任务从创建任务的机制中分离出来,允许我们采⽤不同策略运⾏任务。例如,任务可以被安
排在某⼀个时间延迟后执⾏,或定期执⾏。
可以重⽤线程池中的线程,避免因为线程的创建和销毁所带来的性能开销。
能有效控制线程池的最⼤并发数,避免⼤量的线程之间因互相抢占系统资源⽽导致的阻塞现象。
能够对线程进⾏简单的管理(关闭、回收等),并提供定时执⾏以及指定间隔循环执⾏等功能。
池内线程的数量可以通过⼀些因素来加以估算,如系统 CPU 的数量、物理内存的⼤⼩和并发客户请求数量的期望值等。更为⾼级的线程池架构可以根据使⽤模式动态调整池内线程数量。这类架构在系统负荷低时,提供了较⼩的池,从⽽减低内存消耗(如 Apple的⼤中央调度)。
线程池缺点
创建太多线程,将会浪费⼀定的资源,有些线程未被充分使⽤。
销毁太多线程,将导致之后浪费时间再次创建它们。
创建线程太慢,将会导致长时间的等待,性能变差。
销毁线程太慢,导致其它线程资源饥饿。
三、线程池⼤类总共分为4种
fixThreadPool 正规线程(传统线程池)创建固定个数的线程池,超出的线程会在队列中等待,如有发⽣异常的线程,会⾃动创建⼀个新线程。
cacheThreadPool 缓存线程池创建⼀个缓存的线程池,如果有之前的线程可以使⽤,则使⽤,否则创建。休闲时间超过60秒的线程将被废弃。
singleThreadPoll 单线程线程池(单例线程池)创建⼀个只有⼀个单⼀线程的线程池,保证执⾏有序性,如有发⽣异常的线程,会⾃动创建⼀个新线程。
ScheduledThreadPoll 周期性执⾏任务的线程池,此线程池⽀持定时及周期性执⾏任务的需求。
四、多线程
多线程的优点
1、提⾼CPU的使⽤率
例如朋友圈发表图⽚,当你上传9张图⽚的时候,如果开启⼀个线程⽤同步的⽅式⼀张张上传图⽚,假
设每次上传图⽚的线程只占⽤了CPU 1%d的资源,剩下的99%资源就浪费了。但是如果你开启9个线程同时上传图⽚,CPU就可以使⽤9%的资源了。
2、提⾼程序的⼯作效率
还是拿朋友圈发表图⽚来说,假设开启⼀个线程上传⼀张图⽚的时间是1秒,那么同步的⽅式上传9张就需要9秒,但是你开启9个线程同时上传图⽚,那么就只需要1秒就完成了。
多线程的缺点
1、如果有⼤量的线程,会影响性能,因为CPU需要在它们之间切换。
2、更多的线程需要更多的内存空间。
3、多线程操作可能会出现线程安全或者死锁等问题。
多线程并⾏和并发的区别
概念
并⾏:多个处理器或者多核处理器同时执⾏多个不同的任务。
并发:⼀个处理器处理多个任务。
打个⽐喻
并⾏就是⼀个⼈⽤他的左⼿喂⼥⼉吃饭,同时⽤右⼿喂⼉⼦吃饭。
并发就是⼀个⼈先喂⼥⼉吃⼀⼝饭,接着喂⼉⼦吃⼀⼝,然后再喂⼥⼉吃⼀⼝,轮流喂。
五、 线程池与多线程的区别
线程池是在程序运⾏开始,创建好的n个线程,并且这n个线程挂起等待任务的到来。⽽多线程是在任务到来得时候进⾏创建,然后执⾏任务。
线程池中的线程执⾏完之后不会回收线程,会继续将线程放在等待队列中;多线程程序在每次任务完成之后会回收该线程。由于线程池中线程是创建好的,所以在效率上相对于多线程会⾼很多。
线程池也在⾼并发的情况下有着较好的性能;不容易挂掉。多线程在创建线程数较多的情况下,很容易挂掉。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。