Java 里的thread (线程)简介
作者:网络转载 发布时间:[ 2014/2/19 9:20:48 ] 推荐标签:线程 Java 程序
在Java里 thread 是线程的意思.
说到线程的概念, 自然离不开另外两个词: 程序和进程.
从基本的程序讲起:
一. 什么是程序(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!
");
}
//System.out.printf("f() is done!
"); //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!
");
}
}

sales@spasvo.com