第十二章学习总结
进程与线程:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。进程是程序的一次动态执行过程;线程是比进程更小的执行单位
区别:
(1)进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元
(2)同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。
(3)进程的创建调用fork或者vfork,而线程的创建调用pthread_create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束
(4)线程是轻两级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的
(5)线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源
(6)线程有自己的私有属性TCB,线程id,寄存器、硬件上下文,而进程也有自己的私有属性进程控制块PCB,这些私有属性是不被共享的,用来标示一个进程或一个线程的标志
线程的状态与生命周期
- Java语言使用Thread类及其子类的对象来表示线程,完整的生命周期要经历一下状态:
- 新建
- 运行:必须调用start()方法通知JVM才会运行
- 中断: 四种原因中断
- 死亡:原因有二,一为正常运行结束;二为线程被强制提前结束,即强制run()方法结束。
- 常用方法
- start();
- run(),在线程没有结束run()之前,不要再让线程调用start()方法,否则将发生IllegalThreadStateException异常
- sleep(int millsecond)必须在try-catch语句块中调用sleep方法
- isAlive();
- currentThread()返回当前正在使用CPU资源的线程
- interrupt();
- 线程同步机制:当一个线程A使用synchronized方法时,时就必须等待,知道线程A使用完synchronized方法
- 不可以在非同步方法中使用wait(),notify(),notifyAll()
- A在运行期间使用Join()联合B,那么A线程立刻终端执行,一直等待B执行结束,A再重新排队等待CPU资源
- AWT-EventQuecue线程负责处理GUI事件,AWT-Windows线程负责将窗体或组件绘制到桌面
代码托管:https://gitee.com/BESTI-IS-JAVA-2018/besti-Java20165105