线程

来源:互联网 发布:航班查询系统c语言 编辑:程序博客网 时间:2024/05/21 12:09

1.进程:操作系统中的一种数据结构,包含着嫩村,文件句柄,线程等系统对象和资源,是一个运行着的程序。

2.线程:可以理解为属于进程的某段执行者的代码流,同属于一个进程的线程可以共享进程的内存空间系统资源,每个线程有属于自己的堆栈空间。操作系统调度切换多个线程比调度切换进程要快很多,而且进程之间无法共享内存空间,系统资源。

3.Thread 类和Runnable:差别之处在于设计的思路,如果设计的目的纯粹是为了实现Thread的执行过程,那么就没有必要从Thread类派生了,派生的原意是为了扩展父类的功能。如果类已经有了一个父类,那么这种时候也只能通过继承Runnable接口来参与多线程运行。java是无法实现多继承的。2)Thread本身就是Runnable接口的实现,因从从Threa到Runnble只要强制类型转换即可。Runnble只是一个接口,如果类实现了该接口,那只是实现了线程体。

4.线程的四种执行状态:1)初始态:Thread类的实例被创建,但是start()没有被调用。 2  )运行太:一旦调用了Thread实例的start()方法,即进入运行态。 3)阻塞态:如果线程在运行过程中因为等待某些消息/数据而暂时停止运行,就进入了阻塞状态。4)完成态:如果线程执行体(也就是run()函数)执行完毕,或者某些异常而导致线程执行体意外终止,线程进入完成态。

5.线程泄漏:常常用线程池技术来统一管理多个线程,如果其中某一个线程因为发生了不可预见的运行太错误而意外退出,或者因为发生阻塞而挂起,而线程池又没有即使不做到这些信息,误以为线程还在执行,那么就会导致线程泄漏。

6.线程同步机制:JVM中的线程同步是通过获取对象monitor来完成的,每个对象实例都有一个monitor(看成锁),线程在执行同步操作首先获取某个对象实例的monitor(上锁),同步代码执行完毕,则将monitor 释放。此时若其他线程想要执行同样的操作,在获取对象monitor时会阻塞等待,知道前面的线程将该monitor释放位置,JVM保证同一时刻只有一个线程可以获取得到某个对象monitor。

原创粉丝点击