线程:一个独立的运行单位
31 号学习了线程,在此之前我编写的所有 Java 程序都只有一个主线程,而线程的加入可以让程序在主线程下加入分线程,让程序具备同时进行多项工作的可能
在 多线程 OS 中,通常是在一个 进程 中包括多个线程,每个线程都是作为利用 CPU 的基本单位,是花费最小开销的实体。线程具有以下属性。
1 )轻型实体
线程中的实体基本上不拥有 系统资源 ,只是有一点必不可少的、能保证独立 运行 的资源,比如,在每个线程中都应具有一个用于控制线程运行的 线程控制块 TCB ,用于指示被执行指令序列的 程序计数器 、保留 局部变量 、少数状态参数和 返回地址 等的一组 寄存器 和 堆栈 。
2 )独立调度和分派的基本单位。
在多线程 OS 中,线程是能独立 运行 的基本单位,因而也是独立调度和分派的基本单位。由于线程很 “ 轻 ” ,故线程的切换非常迅速且开销小(在同一 进程 中的)。
3 )可并发执行。
在一个 进程 中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了 处理机 与外围设备并行工作的能力。
4 )共享 进程 资源。
在同一 进程 中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的 地址空间 (进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开 文件 、定时器、 信号量 机构等。由于同一个 进程 内的线程 共享内存 和 文件 ,所以线程之间互相通信不必调用 内核 。
这便是最简单的一个线程程序了,主程序下只有一个线程
而这样就可以创建 5 个线程
而线程远不止这一种创建方法,还有通过内部类,通过 Runable 接口创建线程,通过 Timertask 创建等
其中Timertask提供了几种方法特别好用,比如scherule方法,他可以让线程在程序启动后n毫秒后启动