首先我们得理解任务,线程,cpu之前的关系?
任务就是我们执行当前想法,线程就是这个需求的执行过程,cpu就是去执行这个线程。
现在是有多个任务,多个线程,需要cpu去执行,怎么去处理?如果是程序中是单线程,那么多个线程过来得排队,这样影响执行效率,在业务需求没有多的关联关系,我们可以使用多线程。
解决办法,线程池,多个任务在线程池外等候,当实例了一个线程池,在线程池调度中心,可以接受外部等候的线程过来执行,执行之前线程池中的线程是阻塞的,在调度中心外部某个任务和线程池中线程有对应关系后,这个线程就去执行这个任务,这个时候有多个线程,多个任务,就可以实现多线程对多任务同时处理,实现多线程。
那我们是不是觉得线程池中的线程越多越好呢?
显然不是的,我们程序的执行都是在jvm中开辟一道内存空间,而我们这个内容空间是存在某在一个服务器或者pc机上,是我们本身的资源,资源越多速度肯定会慢下来,而且我们在实例化一个线程池之后,jvm开辟的内存空间就确定了,显然线程池里面的运输线程越多不一定越好。
多线程状态下cpu是怎么执行的?
在多线程状态下,cpu执行是随机的,它不单独执行哪个线程先执行,当我们在代码中由上而下.start()时,其执行也不是我们程序的执行顺序,而是cpu随机启用执行的,在使用多线程技术时,多线程的运行结果和多线程的执行顺序或者调用顺序是无关的。