码迷,mamicode.com
首页 > 编程语言 > 详细

线程和进程

时间:2020-04-29 12:26:41      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:ble   不同的   调用   pre   共享   静态   star   暂停   包含   

进程:在操作系统中运行的程序就是进程,如看视频。
线程:线程就是独立的执行路径。一个进程中可以有多个线程,如视频中听声音,看图像,显示字幕。
多线程:就是指多条路径。
进程与线程的区别:
(1)根本区别:进程是资源分配的基本单位,线程是程序调度和执行的基本单位。
(2)开销:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。

线程可以看成轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和

程序计数器(PC),线程切换的开销小。

(3)所处环境:在操作系统中能同时运行多个任务(程序)。
在同一应用程序中有多个顺序流同时执行。
(4)分配内存:系统在运行的时候会为每个进程分配不同的内存区域。

除了CPU之外,不会为线程分配内存(线程所使用的资源是它所属的进程的资源),

线程组只能共享资源。

(5)包含关系:没有线程的进程可以被看成单线程,如果一个进程内拥有多个线程,则执行过程

不是一条线的,而是多条线(线程)共同完成的。

   线程是进程的一部分,所以线程有时被称为轻权进程或者是轻量级进程。

实现多线程的方法:
(1)继承Thread类,重写run()方法:
(2)实现Runnable接口,重写run()方法:

(3)实现Callable接口:

线程的五大状态:新生状态,就绪状态,运行状态,阻塞状态,死亡状态。

注意:(1)线程进入死亡状态之后不能重新开启,重新开启是新的线程。

(2)线程进入阻塞状态之后,重新恢复的话是进入就绪状态。

 

线程的方法:

线程进入就绪状态的四个原因:
(1)创建线程以后,调用start()方法;
(2)解除阻塞,从阻塞状态恢复;

(3)调用yield()方法,结束中断,礼让线程,让当前正在执行的线程暂停,不是阻塞状态,而是

将线程从运行状态转入就绪状态。

(4)JVM将CPU从本地线程切换到其他线程。

 

线程进入阻塞状态的四种原因:

 

(1)调用sleep()方法:sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会

让当前线程暂停执行指定时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,

因此休眠时间结束后会自动恢复(线程回到就绪状态)。

(2)调用wait()方法:wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃

对象的锁(线程暂停执行),进入对象的等待池(wait一pool),只有调用对象的notify()

方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool),如果

线程重新获得对象的锁就可以进入就绪状态。

(3)调用join()方法:阻塞指定线程等到另一个线程完成以后再继续执行。合并线程,待此线程

执行完毕后,再去执行其他线程,其他线程阻塞。

(4)io操作中的read和Write。 

终止线程的两种方式:

(1)线程正常执行完毕:次数限制;
(2)外部干涉:加入标识。
注意:不要不使用stop和deatory终止线程,不安全。
线程:线程分为用户线程和守护线程。
虚拟机必须等待用户线程执行完毕;
虚拟机不必等待守护线程执行完毕;

守护线程是为用户线程服务的。

 

线程和进程

标签:ble   不同的   调用   pre   共享   静态   star   暂停   包含   

原文地址:https://www.cnblogs.com/liqinzhen/p/12801113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!