多线程、多进程

在这里插入图片描述
多线程概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。其实平时我们启动程序,其实是启动的进程,但是在往下细分的话,其实是进程的一个或者多个线程完成的功能。

主线程:当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程(Main Thread)。每个进程至少都有一个主线程,主线程通常最后关闭。

子线程:在程序中创建的其他线程,相对于主线程来说就是这个主线程的子线程。

并行:任务数小于或等于cpu的核数,是真正意义上一起执行

并发:任务数大于cpu核数,多个任务交替执行

线程执行的时候是无序的,由cpu调度决定的

线程执行过程中,主线程会等待所有子线程执行完成用户程序再退出

好处 :(1)易于调度。

      (2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。

      (3)开销少。创建线程比创建进程要快,所需开销很少。

      (4)利于充分发挥多处理器的功能。通过创建多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,
      	  使每个处理器都得到充分运行。

线程的生命周期
在这里插入图片描述
各个状态的说明如下:

1.new新建。新创建的线程经过初始化后,进入Runnable状态。

2.Runnable就绪。等待线程调度。调度后进入运行状态。

3.Running运行。

4.Blocked阻塞,暂停运行,解除阻塞后进入Runnable状态重新等待调度。

5.Dead消亡。线程方法执行完毕返回或者异常终止。

可能有3种情况从Running进入Blocked:

同步:线程中获取同步锁,但是资源已经被其他线程锁定时,进入Locked状态,直到该资源可获取(获取的顺序由Lock队列控制)

睡眠:线程运行sleep()或join()方法后,线程进入Sleeping状态。区别在于sleep等待固定的时间,而join是等待子线程执行完。当然join也可以指定一个“超时时间”。从语义上来说,如果两个线程a,b, 在a中调用b.join(),相当于合并(join)成一个线程。最常见的情况是在主线程中join所有的子线程。

等待:线程中执行wait()方法后,线程进入Waiting状态,等待其他线程的通知(notify)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章