茫茫人海千千万万,感谢这一秒你看到这里。希望我的面试题系列能对你的有所帮助!共勉!
愿你在未来的日子,保持热爱,奔赴山海!
今天我们继续聊一点别的吧,今天我们聊下多线程
进程:进程是程序的一次执行过程,是系统运行程序的基本单位。
线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。
区别:
为什么要用多线程:
不错不错,线程知识也有涉及!
上下文切换一般发生在多线程情况下,因为一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。而在多核cpu下,多线程是并行工作的,如果线程数多,单个核又会并发的调度线程,运行时就会让一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于上下文切换。
对于我们Java程序线程来说,一旦一个线程抢占到CPU资源的使用权后,另一个线程需要保存当前的一个状态,以便下次抢占成功后可以回到当前状态,JVM中有块内存地址叫程序计数器,用于记录保存线程执行到哪一行代码,它是每个线程独有的。执行任务从保存到再次加载的过程就是上下文切换。
实际上,上下文切换也是对系统意味着来说会消耗大量的CPU时间,消耗大量资源。
以下几种情况会发生上下文切换。
可以,那问你最后一道:
创建线程有以下方式:
继承Thread类,重载它的run方法。
实现 Runnalbe接口,重载 Runnalbe接口中的run方法实现 。
实现Callable接口方式,重写Callable接口中的call方法,并且这个call方法可以有返回值。
需要注意三者的区别:
小伙子不错嘛!今天就到这里,期待你明天的到来,希望能让我继续保持惊喜!
注: 如果文章有任何错误和建议,请各位大佬尽情留言!如果这篇文章对你也有所帮助,希望可爱亲切的您给个三连关注下,非常感谢啦!