以前我们所接触的都是关于顺序编程的知识。即程序中的所有事物在任意时刻都只能执行一个步骤。然而,对于某些问题,如果能够同时的执行程序中的多个部分,则会变得非常方便甚至非常必要,因为这些部分要么看起来在同时执行,要么在多处理器环境下可以同时执行。
基本的线程机制:
线程可以让我们将程序划分为多个分离的、独立运行的任务。通过使用多线程机制,这些独立任务(也被称为子任务)中的每一个都将由执行线程来驱动。一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个同时执行任务,但是你的程序使得每个任务都好像有自己的CPU一样。其底层机制是切分CPU时间,但通常你不需要考虑它。
线程模型为编程带来了便利,它简化了在单一程序中同时交织在一个的多个操作的处理。在使用线程时,CPU将轮流给每个任务分配其占用时间。每个任务都觉得自己在一直占用CPU,但事实上CPU时间是划分成片段分配给了所有任务。
定义任务:
线程可以驱动任务,因此你需要一种描述任务的方式,这可以用Runnable接口来提供。要想定义任务,只需实现Runnable接口并编写run()方法,使得该任务可以执行你的命令。
任务的run()方法通常会使用死循环的方法使得任务一直运行下去知道不再需要,所以需要设定跳出循环的条件。
在run()中对静态方法Thread.yield()的调用是对线程调度器的一种建议,即可以将CPU从一个线程转移给另一个线程。
当从Runnable导出一个类时,它必须具有run()方法,但是这个方法并无特殊之处——它不会产生任何内在的线程能力。调用Tread对象的start()方法为该线程执行必须的初始化操作,然