图灵学院四期java架构师学习笔记
线程章节笔记:
⼀:为什么要学多线程
应付⾯试 :多线程⼏乎是⾯试中必问的题,所以掌握⼀定的基础知识是必须的。
了解并发编程:实际⼯作中很少写多线程的代码,这部分代码⼀般都被⼈封装起来了,在业务中使⽤多线程的机会也不是很多(看具体项⽬),虽然代码中很少会⾃⼰去创建线程,但是实际环境中每⾏代码却都是并⾏执⾏的,同⼀时刻⼤量请求同⼀个接⼝,并发可能会产⽣⼀些问题,所以也需要掌握⼀定的并发知识
⼆:进程与线程
1. 进程
进程是资源(CPU、内存等)分配的基本单位,它是程序执⾏时的⼀个实例。程序运⾏时系统就会创建⼀个进程,并为它分配资源,然后把该进程放⼊进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运⾏。
2. 线程
线程是⼀条执⾏路径,是程序执⾏时的最⼩单位,它是进程的⼀个执⾏流,是CPU调度和分派的基本单位,⼀个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有⾃⼰的堆栈和局部变量。线程由CPU独⽴调度执⾏,在多CPU环境下就允许多个线程同时运⾏。同样多线程也可以实现并发操作,每个请求分配⼀个线程来处理。
⼀个正在运⾏的软件(如迅雷)就是⼀个进程,⼀个进程可以同时运⾏多个任务( 迅雷软件可以同时下载多个⽂件,每个下载任务就是⼀个线程), 可以简单的认为进程是线程的集合。
线程是⼀条可以执⾏的路径。
对于单核CPU⽽⾔:多线程就是⼀个CPU在来回的切换,在交替执⾏。
对于多核CPU⽽⾔:多线程就是同时有多条执⾏路径在同时(并⾏)执⾏,每个核执⾏⼀个线程,多个核就有可能是⼀块同时执⾏的。
3. 进程与线程的关系
⼀个程序就是⼀个进程,⽽⼀个程序中的多个任务则被称为线程。进程是表⽰资源分配的基本单位,⼜是调度运⾏的基本单位。,亦即执⾏处理机调度的基本单位。 进程和线程的关系:
⼀个线程只能属于⼀个进程,⽽⼀个进程可以有多个线程,但⾄少有⼀个线程。线程是操作系统可识别的最⼩执⾏和调度单位。
资源分配给进程,同⼀进程的所有线程共享该进程的所有资源。同⼀进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有⾃⼰的栈段,栈段⼜叫运⾏时段,⽤来存放所有局部变量和临时变量,即每个线程都有⾃⼰的堆栈和局部变量。
处理机分给线程,即真正在处理机上运⾏的是线程。
线程在执⾏过程中,需要协作同步。不同进程的线程间要利⽤消息通信的办法实现同步。
如果把上课的过程⽐作进程,把⽼师⽐作CPU,那么可以把每个学⽣⽐作每个线程,所有学⽣共享这个教室(也就是所有线程共享进程的资源),上课时学⽣A向⽼师提出问题,⽼师对A进⾏解答,此时可能会有学⽣B对⽼师的解答不懂会提出B的疑问(注意:此时可能⽼师还没有对A同学的问题解答完毕),此时⽼师⼜向学⽣B解惑,解释完之后⼜继续回答学⽣A的问题,同⼀时刻⽼师只能向⼀个学⽣回答问题(即:当多个线程在运⾏时,同⼀个CPU在某⼀个时刻只能服务于⼀个线程,可能⼀个线程分配⼀点时间,时间到了就轮到其它线程执⾏了,这样多个线程在来回的切换)
java学习资源
4. 为什么要使⽤多线程
多线程可以提⾼程序的效率。
实际⽣活案例:村长要求喜洋洋在⼀个⼩时内打100桶⽔,可以喜洋洋⼀个⼩时只能打25桶⽔,如果这样就需要4个⼩时才能完成任务,为了在⼀个⼩时能够完成,喜洋洋就请美洋洋、懒洋洋、沸洋洋,来帮忙,这样4只⽺同时⼲活,在⼀⼩时内完成了任务。原本⽤4个⼩时完成的任务现在只需要1个⼩时就完成了,如果把每只⽺看做⼀个线程,多只⽺即多线程可以提⾼程序的效率。
5. 多线程应⽤场景
⼀般线程之间⽐较独⽴,互不影响
⼀个线程发⽣问题,⼀般不影响其它线程三:多线程的实现⽅式

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