多线程_线程简介

来源:互联网 发布:linux vim 删除 编辑:程序博客网 时间:2024/06/01 23:20

1. 什么是线程?什么是进程?
线程(thread):线程是操作系统所能运行调度的最小单位。他被包含在进程之中,是进程的实际运作单位,也就是程序运行流的最小单位。一个标准的线程由:线程ID、PC(当前指令指针)、寄存器集合、堆栈组成。也被称为轻量级的进程。一个线程可以创建和撤销另一个线程,同一个进程中的线程可以并发执行。

进程(Process):是计算机中已运行程序的实体。进程本身不会运行,它是线程的一个容器。在一个容器种,可以存在多个线程。

2. 线程和进程之间的关系
联系:
<1>一个程序至少有一个进程,一个进程之中至少有一个线程。
<2>线程不能单独运行,必须存在于进程当中。
<3>一个进程拥有自己的一整套变量(系统资源),而线程则共享一个进程中的数据。

区别:
 进程执行开销大,但是可以跨机器迁移。
 线程执行开销小,但是不利于资源的管理和保护。

3. 线程状态

  • New(被新建)
     当用new操作符创建一个新线程时,如new Thread(r),该程序还没有运行起来。这意味着它的状态是new。当一个线程处于新建状态时,程序还没有开始运行线程中心的代码。类似于我们运行Tomcat,在运行之前还有一些基础工作要做。
  • Runable(可运行)
     一旦调用start方法,线程处于runable状态。一个可运行的线程可能在运行,也可能不在运行,这取决于操作系统是否提供运行时间。简而言之,这个状态就是具有运行的资格(执行权),但是有没有在运行,要看系统是否给它执行权(CPU资源)。
  • Blocked(被阻塞)
     当线程处于阻塞状态时,它暂时不活动(没有执行权),此时它不运行任何代码且消耗最少资源。知道改状态被改变。当一个线程试图获取一个内部的对象锁,而该锁被其他线程持有,自己就会进入阻塞状态。当其他线程释放该锁,并且自己持有该锁,该线程变成非阻塞状态。
  • Waiting(等待)
  • Timed waiting(计时等待)
     当线程处于等待状态时,它暂时不活动(没有执行权),此时它不运行任何代码且消耗最少资源。线程放弃执行权和系统资源,等待另一个线程来唤醒自己的状态就称之为等待。例如调用Thread.wait()方法或是sleep(long millis)。
  • Terminated(被终止)
     线程被终止的原因有两个,一个是run方法正常运行而自然死亡。另一个是因为一个没有捕获的异常终止了run方法而意外死亡。
原创粉丝点击