java!

来源:互联网 发布:djvu阅读器安卓版 知乎 编辑:程序博客网 时间:2024/05/22 13:53

  说到线程的概念, 自然离不开另外两个词: 程序和进程。

  从最基本的程序讲起:

  一。 什么是程序(Program)

  所谓程序, 就是1个严格有序的指令集合。 程序规定了完成某一任务时,计算机所需要做的各种操作, 以及操作的顺序。

  1.1 单道程序运行环境

  所谓单道程序环境就是指, 计算机除了操作系统之外, 只允许运行1个用户程序。

  以前的DOS系统就是1个典型的单道程序运行环境。

  单道程序有如下特点:

  1. 资源的独占性: 任何时候, 内存内只有1个用户程序, 这个程序独享系统的所有资源。

  2. 执行顺序性: 内存中只执行1个程序, 各程序是按次序执行的, 即是做完1件事后, 才做另一件事。

  绝不可能执行1个程序的中途暂停, 然后去执行另1个程序。

  3.结果的再现性: 只要执行环境和初始条件相同, 重复执行1个程序, 获得的结果总是一样的。

  1.2 多道程序运行环境

  所谓多道程序运行环境是指, 计算机除了操作系统之外, 允许同时运行多个用户程序。

  当今的unix, linux都是典型的多道程序运行环境。

  多道程序有如下特点:

  1. 间断性: 也就是cpu会在多个程序之间切换执行, 例如cpu执行程序A一段时间后, 会切换去执行程序B一段时间。

  由于这个时间段很短, 所以对用户造成1个程序A和程序B同时执行的假象。

  2. 失去封闭性: 程序执行受外界影响, 也就是多个程序之间共享资源, 互相制约。

  3. 不可再现性: 重复执行时, 可能得到不同的结果。 原因就是上面的点, 执行时可能会受到内存中其他程序的影响。

  二。 什么是进程(process)

  进程这个概念是基于多道程序运行环境来讲的。

  1个进程就是程序在内存中运行的1个实例

  由于在多道程序运行环境中, 同1个程序可以同时产生两个实例在内存里运行。

  举个简单例子: 例如你可以在操作系统打开两个gvim 文本编辑器, 同时编辑两个不同的文件。

  这时执行ps -ef | grep gvim 就会见到系统中有两个名字是gvim的进程, 但是它们的进程id是不同的。

  也就是将, gvim这个程序在内存中生成两个进程同时运行。

  在多道程序运行环境中。 引用进程这个概念来描叙程序在内存里事例, 用来区别于程序本身。

  真正深入了解进程并不简单, 进程其实算是属于操作系统这门课的范畴。 1个进程包括程序段, 数据段, 程序控制块等, 但是作为一个普通的程序猿, 没必要理解得这么深入。

  三。 什么是线程(thread)。

  相对地, 我认为作为1个普通的程序猿, 必须深入了解线程这个概念。

  其实, 线程就是1个进程的执行路径。

  一般的java程序都是从启动类的main函数入口开始执行, main函数的结束而停止。 这条执行路径就是java程序的主线程。

  也就是讲:

  线程是相对于进程来讲的, 1个进程至少存在1条线程。

  而java允许多线程编程, 也就是1个进程除主线程外, 还允许存在1个或若干个其他线程, cpu会在这些线程当中间断切换执行, 给用户造成同时执行的假象。

  四。 1个单线程java程序的简单例子。

  例子如下:

  package Thread_kng;

  class S_thrd_1{

  public void f(){

  while (true){

  System.out.printf("Thread main is runing!\n");

  }

  //System.out.printf("f() is done!\n"); //compilation fail

  }

  }

  public class S_thread_expl{

  public static void g(){

  S_thrd_1 s = new S_thrd_1();

  s.f();

  System.out.printf("g() is done!\n");

  }

  }

0 0
原创粉丝点击