java!,
java!,
说到线程的概念, 自然离不开另外两个词: 程序和进程。
从最基本的程序讲起:
一。 什么是程序(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");
}
}
相关文章
- 暂无相关文章
用户点评