一组多线程使用的例子:http://janeky.iteye.com/category/124727
JDK1.5的包:
java.util.concurrent
1、
public interface Future<V>
Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。计算完成后只能使用 get 方法来检索结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方法来执行。还提供了其他方法,以确定任务是正常完成还是被取消了。一旦计算完成,就不能再取消计算。如果为了可取消性而使用 Future但又不提供可用的结果,则可以声明 Future<?> 形式类型、并返回 null 作为基础任务的结果。
用法示例(注意,下列各类都是构造好的。)
interface ArchiveSearcher { String search(String target); } class App { ExecutorService executor = ... ArchiveSearcher searcher = ... void showSearch(final String target) throws InterruptedException { Future<String> future = executor.submit(new Callable<String>() { public String call() { return searcher.search(target); } }); displayOtherThings(); // do other things while searching try { displayText(future.get()); // use future } catch (ExecutionException ex) { cleanup(); return; } } }
FutureTask
类是 Future 的一个实现,Future 可实现 Runnable,所以可通过 Executor 来执行。例如,可用下列内容替换上面带有 submit 的构造:
FutureTask<String> future = new FutureTask<String>(new Callable<String>() { public String call() { return searcher.search(target); }}); executor.execute(future);
2、
public interface Callable<V>
返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。
Callable 接口类似于 Runnable
,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。
Executors
类包含一些从其他普通形式转换成 Callable 类的实用方法。
3、
public interface ExecutorService
Executor
提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future
的方法。
可以关闭 ExecutorService,这将导致其停止接受新任务。关闭后,执行程序将最后终止,这时没有任务在执行,也没有任务在等待执行,并且无法提交新任务。
通过创建并返回一个可用于取消执行和/或等待完成的 Future
,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable)
。方法 invokeAny 和 invokeAll 是批量执行的最常用形式,它们执行任务集合,然后等待至少一个,或全部任务完成(可使用 ExecutorCompletionService
类来编写这些方法的自定义变体)。
Executors
类提供了用于此包中所提供的执行程序服务的工厂方法。
用法示例
下面给出了一个网络服务的简单结构,这里线程池中的线程作为传入的请求。它使用了预先配置的 Executors.newFixedThreadPool(int)
工厂方法:
class NetworkService { private final ServerSocket serverSocket; private final ExecutorService pool; public NetworkService(int port, int poolSize) throws IOException { serverSocket = new ServerSocket(port); pool = Executors.newFixedThreadPool(poolSize); } public void serve() { try { for (;;) { pool.execute(new Handler(serverSocket.accept())); } } catch (IOException ex) { pool.shutdown(); } } } class Handler implements Runnable { private final Socket socket; Handler(Socket socket) { this.socket = socket; } public void run() { // read and service request } }
4、
public interface Executor
执行已提交的 Runnable
任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建线程。例如,可能会使用以下方法,而不是为一组任务中的每个任务调用 new Thread(new(RunnableTask())).start():
Executor executor = anExecutor; executor.execute(new RunnableTask1()); executor.execute(new RunnableTask2()); ...
不过,Executor 接口并没有严格地要求执行是异步的。在最简单的情况下,执行程序可以在调用方的线程中立即运行已提交的任务:
class DirectExecutor implements Executor { public void execute(Runnable r) { r.run(); } }
更常见的是,任务是在某个不是调用方线程的线程中执行的。以下执行程序将为每个任务生成一个新线程。
class ThreadPerTaskExecutor implements Executor { public void execute(Runnable r) { new Thread(r).start(); } }
许多 Executor 实现都对调度任务的方式和时间强加了某种限制。以下执行程序使任务提交与第二个执行程序保持连续,这说明了一个复合执行程序。
class SerialExecutor implements Executor { final Queue<Runnable> tasks = new LinkedBlockingQueue<Runnable>(); final Executor executor; Runnable active; SerialExecutor(Executor executor) { this.executor = executor; } public synchronized void execute(final Runnable r) { tasks.offer(new Runnable() { public void run() { try { r.run(); } finally { scheduleNext(); } } }); if (active == null) { scheduleNext(); } } protected synchronized void scheduleNext() { if ((active = tasks.poll()) != null) { executor.execute(active); } } }
此包中提供的 Executor 实现实现了 ExecutorService
,这是一个使用更广泛的接口。ThreadPoolExecutor
类提供一个可扩展的线程池实现。Executors
类为这些 Executor 提供了便捷的工厂方法。
相关推荐
2. **Class Libraries**:IBM JDK 1.5包含了Java标准版(Java SE)的类库,这些类库提供了各种功能,如输入/输出处理、网络通信、多线程编程、数据加密等。此外,IBM可能还对部分类库进行了优化或增加了额外的功能以...
JDK1.5在编译器优化、垃圾收集、内存管理和多线程性能方面都有所改进,提升了整体的运行效率。 配置JDK1.5在Windows环境下,首先需要下载并解压文件`jdk1.5.0_05`,然后设置`JAVA_HOME`环境变量指向JDK的安装目录,...
在并发编程方面,JDK1.5引入了并发工具类(java.util.concurrent),包括Semaphore、CyclicBarrier、CountDownLatch等,这些工具极大地简化了多线程编程中的同步和协调。 在内存模型和并发性能上,JDK1.5引入了Java...
1. **Lambda表达式**:允许以简洁的方式表示匿名函数,极大地简化了多线程和函数式编程。 2. **函数式接口**:如`java.util.Function`,`java.util.Consumer`,为lambda表达式提供接口支持。 3. **Stream API**:...
对于并发编程,JDK1.5引入了java.util.concurrent包,其中包括了线程池、Future、Callable接口以及CyclicBarrier和Semaphore等同步工具类,极大地丰富了并发处理能力,提升了多线程环境下的性能和可维护性。...
在并发处理上,JDK1.5引入了并发工具类(java.util.concurrent),包括线程池(ExecutorService)、并发容器(如ConcurrentHashMap)以及Future接口等,这些工具极大地提高了多线程环境下的程序设计效率和性能。...
在并发编程方面,JDK 1.5引入了并发工具类(java.util.concurrent package),如Executor框架、Semaphore、CountDownLatch和CyclicBarrier等,这些工具大大简化了多线程编程,提高了并发应用的效率和可靠性。...
java多线程小示例,
12. **并发编程改进**:包括`java.util.concurrent`包的引入,提供了线程池、并发容器、并发工具类等,简化了多线程编程。 13. **XML支持的增强**:JAXB(Java Architecture for XML Binding)的引入,使得Java对象...
8. 遗留的和已删除的特性:JDK 1.5还移除了一些过时的API,如Vector和Hashtable,鼓励开发者使用更加线程安全的ArrayList和HashMap。 9. 类依赖性管理:通过引入ServiceLoader,可以方便地加载实现特定接口的类,...
例如,JVM引入了基于栈的并发垃圾收集器( Concurrent Mark Sweep Collector),提升了多线程环境下的性能。另外,Java I/O系统得到了增强,新增了NIO(New Input/Output)框架,提供了非阻塞I/O操作,适用于高并发...
JDK 1.5引入了`java.util.concurrent`包,提供了线程安全的数据结构和并发编程工具,如`Executor`框架、`Future`接口、`Semaphore`、`CyclicBarrier`等,极大地简化了多线程编程。 ### 10. **Synchronized关键字...
9. **并发API(Concurrent APIs)**: JDK1.5加强了对多线程编程的支持,引入了并发工具类如`java.util.concurrent`包,包括`ExecutorService`、`Semaphore`、`CountDownLatch`等,以及`java.util.concurrent.atomic`...
9. **集合框架增强**:对Java集合框架进行了优化,包括更强大的List、Set和Map实现,以及新的并发集合类,如ConcurrentHashMap,适应多线程环境。 10. **异常链**:在处理异常时,可以创建异常链,记录并展示完整的...
安装程序"jdk1.5 for windows(32位)安装程序.exe"将引导用户完成配置步骤,包括选择安装目录、设置环境变量(如JAVA_HOME、PATH和CLASSPATH)以及选择是否创建桌面快捷方式。 请注意,由于JDK 1.5已经过时,可能...
11. **并发工具类(Concurrent Utilities)**:在java.util.concurrent包中引入了许多新的并发控制工具,如Executor框架、Semaphore、CyclicBarrier等,提高了多线程编程的效率和可靠性。 12. **NIO.2(New I/O 2)...
11. **内存模型的增强**:JDK 1.5对Java内存模型(JMM)进行了改进,确保了多线程环境下的正确性,例如volatile关键字的增强。 **安装JDK 1.5 for Windows**: 1. 下载`jdk-1_5_0_21-windows-i586-p.exe`安装文件...
10. **线程并发库**:JDK 1.5加强了对多线程编程的支持,提供了`java.util.concurrent`包,包含如`ExecutorService`、`Future`、`Semaphore`等工具类,使得并发编程更加高效和安全。 11. **二进制表示(二进制 ...
到了JDK1.6,这个版本的JDK对内存管理和多线程有显著优化,理论上应该能更好地支持jxl.jar的运行。开发者可以利用JDK1.6的新特性,如并发工具类,来提升处理Excel文件的效率。但同样,需要进行兼容性测试,确保jxl....
引入了`java.util.concurrent`包,包含了线程池、并发集合等高效并发工具类,提升了多线程编程的效率和安全性。 通过这些特性,JDK1.5极大地提升了Java语言的表达能力和编程效率,为后来的Java版本奠定了坚实的...