PHP+CMS+网站 · 2010年02月4号 0

线程

 线程(thread),有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。
  线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.

1、线程与进程
  线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU
  通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。
  因而近年来推出的通用操作系统都引入了线程,以便进一步提高系统的并发性,并把它视为现代操作系统的一个重要指标。
2、线程的周期
  新建 就绪 运行 阻塞 死亡
3、线程调度与优先级
  有线程进入了就绪状态,需要有线程调度程序来决定何时执行,根据优先级来调度.
4、线程组
  每个线程都是一个线程组的一个成员,线程组把多个线程集成一个对象,通过线程组可以同时对其中的多个线程进行操作.在生成线程时必须将线程放在指定的线程组,也可以放在缺省的线程组中,缺省的就是生成该线程的线程所在的线程组.一旦一个线程加入了某个线程组,不能被移出这个组.
5、守护线程
  守护线程是特殊的线程,一般用于在后台为其他线程提供服务.
  isDaemon():判断一个线程是否为守护线程.
  set Daemon():设置一个线程为守护线程.
6、Thread类和Runnable接口
  Thread类
  类Thread在包java.lang中定义,它的构造方法如下:
  public Thread();
  public Thread(Runnable target);
  public Thread(Runnable target,String name);
  public Thread(String name);
  public Thread(ThreadGroup group,Runnable target);
  public Thread(ThreadGroup group, String name);
  主要方法
  isActive() 判断是否处于执行状态
  Suspend() 暂停执行
  reSume 恢复执行
  start() 开始执行
  Stop() 停止执行
  sleep() 睡眠
  run() 程序体
  yield() 向其他线程退让运行权
  线程优先级
  Public statuc final int MAX_PRIORITY最高优先级,10
  Public statuc final int MIN_PRIORITY最低优先级,1
  Public statuc final int NORM_PRIORITY普通优先级,5
  Runnable接口
  Runnable接口中只定义了一个方法run()作为线程体,
  void run()
  Java的线程是通过java.lang.Thread类来实现的。
  VM启动时会有一个由主方法(public static void main(){})所定义的线程。
  可以通过创建Thread的实例来创建新的线程。
  每个线程都是通过某个特定的Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。
  通过调用Thread类的start()方法来启动一个线程
  Java里面实现多线程,有2个方法
  1 继承 Thread类,比如
  class MyThread extends Thread {
  public void run() {
  // 这里写上线程的内容
  }
  public static void main(String[] args) {
  // 使用这个方法启动一个线程
  new MyThread().start();
  }
  }
  2 实现 Runnable接口
  class MyThread implements Runnable{
  public void run() {
  // 这里写上线程的内容
  }
  public static void main(String[] args) {
  // 使用这个方法启动一个线程
  new Thread(new MyThread()).start();
  }
  }
  一般鼓励使用第二种方法,因为Java里面只允许单一继承,但允许实现多个接口。第二个方法更加灵活。