多线程机制能够使应用程序在同一时间并行执行多项任务,而且相应的同步机制可以保证不同线程能够正确地共享数据。使用多线程,可以带来更好的交互能力和实时行为。
在 Java 5.0 之前 Java 里的多线程编程主要是通过 Thread 类,Runnable 接口, Object 对象中的 wait()、 notify()、 notifyAll()等方法和 synchronized 关 键词来实现的。 这些工具虽然能在大多数情况下解决对共享资源的管理和线程间 的调度,但存在以下几个问题
1. 过于原始,拿来就能用的功能有限,即使是要实现简单的多线程功能也 需要编写大量的代码。这些工具就像汇编语言一样难以学习和使用,比这更糟糕 的是稍有不慎它们还可能被错误地使用,而且这样的错误很难被发现。
2. 如果使用不当,会使程序的运行效率大大降低。
3. 为了提高开发效率,简化编程,开发人员在做项目的时候往往需要写一 些共享的工具来实现一些普遍适用的功能。但因为没有规范,相同的工具会被重 复地开发,造成资源浪费。
4. 因为锁定的功能是通过 Synchronized 来实现的,这是一种块结构,只 能对代码中的一段代码进行锁定,而且锁定是单一的。 一些复杂的功能就很难被实现。比如说如果程序需要取得 lock A 和 lock B 来进行操作 1,然后需要取得 lock C 并且释放 lock A 来进行操作 2,Java 5.0 之前的多线程框架就显得无能为力了。
因为这些问题,程序员对旧的框架一直颇有微词。这种情况一直到 Java 5.0 才有较大的改观,一系列的多线程工具包被纳入了标准库文件。这些工具包括了 一个新的多线程程序的执行框架,使编程人员可方便地协调和调度线程的运行, 并且新加入了一些高性能的常用的工具,使程序更容易编写,运行效率更高。