某些编程语言被设计为可以将并发任务彼此隔离,这些语言通常称为函数型语言,其中每个函数调用都不会产生任何副作用(并因此而不能干涉其他函数),并因此可以当做独立的任务来驱动。Erlang就是这样的语言。
Java采取了更加传统的方式,在顺序性语言的基础上提供对线程的支持。与在多任务操作系统中分叉外部进程不同,线程机制是在由执行程序表示的单一进程中创建任务。这种方式产生的一个好处是操作系统的透明性,这对Java而言,是一个重要的设计指标。
Java的线程机制是抢占式的,这表示调度机制会周期性的中断线程,将上下文切换到另一个线程,从而为每个线程都提供时间片,使得每个线程都会分配到数量合理的时间去驱动他的任务。
当从Runnable导出一个类时,它必须具有run()方法,但是这个方法并无特殊之处——它不会产生任何内在的线程能力。要实现线程行为,你必须显式地将一个任务附着到线程上。
将Runnable对象转变为工作任务的传统方式时把它提交给一个Thread构造器。Thread构造器只需要一个Runnable对象。调用Thread对象的start()方法为该线程执行必须的初始化操作,然后调用Runnable的run()
方法,以便在这个新线程中启动该任务。
多线程交互模式:不进行交互的模式:线程间不需要处理共享的数据,也不需要进行动作协调,那么将会非常简单,就是多个独立的线程各自完成自己线程中的工作。
基于共享容器协同的多线程模式:多个线程间对共享的数据进行处理。例如经典的生产者消费者例子,我们有一个队列用于生产和消费,那么这个队列就是多个线程会共享的一个容器或者数据对象,多个线程会并发地访问这