ysbl

每天获取多一点

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.线程不能单独运行 必须要程序中运行 线程是程序内部的顺序控制流

2.多线程指的是在单个程序中 可以运行运行多个不通的线程来执行多个不同的任务

3.操作系统不把每个线程当独立的进程对待

4.线程和进程都是顺序执行的指令序列 但两者间有区别

进程是一个实体 每个进程都有自己独立的状态 自己的专用数据段 创建进程时 必须建立或复制其专用数据段

线程则是共享数据段 同一个程序中的所有线程只有一个数据段 避免了无谓的数据复制 因此线程的建立和线程间的切换速度大大优于进程

线程具备进程的大多数有点 但是由于多个线程共享一个数据段 所以 数据访问过程的互斥和同步问题 使得系统管理功能变得相对复杂

5.许多编程语言需要用外部的线程软件包来实现多线程 尔JAVA则内在支持多线程 它的所有类都是在多线程的思想下定义的

6.关于JAVA中线程的相关概念:
1.在多线程系统中,每个线程都富裕一个执行优先级 优先级决定了线程被CPU执行的优先程序 优先级高则比优先级低的线程更多的执行时间

2.多个线程的并发执行是通过一个调度程序来进行调度的。

3.线程调度指的是在各个线程之间分配CPU资源。线程调度有两种模型:抢占式和分时模型

4.分时模型:CPU资源是按照时间片来分配的.获得CPU资源的线程只能在指定时间片内执行.一旦时间片用完就必须把CPU让给另一处于就绪的线程(时间分配);
在分时模型中,线程本身不会让出CPU。
5.抢占式模型:如果在一个低优先级的线程执行过程中,又有一个高优先级的线程准备就绪,那么低优先级的线程就把CPU资源让给高优先级的线程。

6.为了使低优先级的线程有机会运行,高优先级的线程应该不时地主动进入睡眠状态(sleep)

7.在JAVA中,线程可以共享数据,这就产生了同步的问题。假如两个线程A和B同时访问一个数据对象。线程A读这个数据对象而线程B写这个数据对象,

8.JAVA线程的五个状态:

新建状态(new):已分配内存空间,私有数据已被初始化 可随时被调度成可运行状态 也可被杀死而变成停止状态

就绪或可运行状态(runnable):正等待CPU资源 随时可被调度执行 处于就绪状态 何时执行取决于该线程的优先级和就绪队列的状况

运行状态(running):运行状态表明线程正在运行,该线程已拥有对CPU的控制权。除非该线程主动放弃CPU控制权 或被优先级更高的线程抢占,否则一直到运行结束
PS:处于运行状态的线程在下列情况下将让出CPU控制权:
·线程运行完毕;
·有比当前进程优先级更高的线程处于可运行状态;
·线程主动睡眠一段时间;this.sleep()
·线程在等待某一资源;this.wait()
挂起状态(blocked):如果一个线程处于挂起状态,那么这个线程暂时无法进入就绪队列。需要某些事件才能唤醒,至于由睡眠事件唤醒,则取决于其挂起的原因。
PS:
·处于睡眠状态的线程等待睡眠结束就变成可运行状态;
·因等待资源或消息而被挂起的线程则需要由一个外来事件唤醒;

停止状态(dead):表示线程已退出运行状态,并且不再进入就绪队列。
PS:可能进程被强行杀死;可能线程执行完毕

 

posted on 2014-01-05 21:15  ysbl  阅读(239)  评论(0编辑  收藏  举报