201711671203《Java程序设计》学习报告第11周

教材学习内容

程序是一段静态的代码,是软件执行的蓝本,进程是程序一次动态执行的过程。线程不是进程,是比线程更小的执行单位,一个进程在执行过程中,可以产生多个线程,形成多条执行线索,每条线程也有它自身的产生、存在、消亡的过程。进程可以共享操作系统的资源,线程间也可以共享进程中的某些内存单元(包括代码与数据),并利用这些共享单位实现数据交换、实时通信与必要的同步操作,线程的中断与恢复可以节省系统的开销。

Java的多线程机制    表面上执行线程给人一种几个事件同时发生的感觉,但这只是一种错觉,Java虚拟机快速地吧控制从一个线程换到另一个线程。线程轮流被执行,使每个线程都有机会试用cpu资源。

线程一个完整的生命周期包括,

新建、

运行(调用start()方法)、

中断(4种情况 1 JVM将cpu资源从当前线程切换给其他线程,使本线程让出CPU使用权    2 执行期间执行了sleep(int millsecond)方法,是当前线程进入休眠,经过millsecond指定毫秒数后重新进到线程队列中排队等待CPU资源  3 执行wait()方法,等其他线程调用notify()方法通知它,它才重新进到线程队列排队CPU资源,从中断处继续运行   4  使用CPU资源期间,执行某个操作进入阻塞状态,此时不能进入排队队列,只有当引起阻塞的原因消除时,线程才重新进排队,从原来中断处继续运行)

死亡(执行完run()方法中全部语句;另一个原因是线程被提前强制地终止)死亡状态是线程释放了实体,释放分配给线程对象的内存

Java虚拟机中的线程调度器负责管理线程,线程优先级分为10个级别,分别用thread类的类常量表示。每个Java线程优先级在常数1和10之间即Thread.MIN_PRIORITY,如果没有明确设置优先级,每个线程的优先级都为常数5即Thread.NORM_PRIORITY

线程优先级通过setPriority(int grade)方法调整,如果该int型参数不在1~10之间,那么该方法产生一个IllegalArgumentException异常,有些操作系统只识别三个级别:1、5、10.

因为每个线程都有机会获得cpu的使用权,当线程使用cpu资源的时间到时后,即使线程没有完成自己的全部操作,JVM也会中断当前线程的执行,吧cpu使用权切换给下一个排队的线程。        加入有A\B\C\D四个线程,A、B级别高于CD,Java调度器首先以轮流的方式执行A、B,一直到A、B都执行完,才会在C、D之间轮流切换。

不提倡使用线程的优先级保证算法的正确执行,要编写正确、跨平台的多线程代码,必须假设线程在任何时刻都有可能被剥夺CPU资源的使用权。

遇到的问题

暂无

  代码行数 博客量 学习时长  
目标        
第一周 53 1 3  
186 1 5  
134 1 4  
233 1 6  
425 1 9  
202 1 5  
62 1 4  
176 1 7  
130 0 6  
十一 56/1631 1/9 8/57  

猜你喜欢

转载自blog.csdn.net/Joan_of_arc_Alter/article/details/84403893