java多线程编程要点(三)
在JDK1.5之前,对高质量Java多线程并发程序设计时,为防止程序崩掉等现象的出现,比如使用wait()、notify()和synchronized等,需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等诸多因素,通常会采用一些较为复杂的安全策略,加重了程序员的开发负担。在JDK1.5出现之后,大牛Doug Lee编写了java.util.concurrent java并发工具包,开发者利用此包,可大大提高并发程序的开发效率,并且能有效防止资源竞争、状态一致和避免死锁。java.util.concurrent包分成了三个部分,分别是java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.locks。内容涵盖了并发集合类、线程池机制、同步互斥机制、线程安全的变量更新工具类、锁等常用工具。
1) java.util.concurren:其主要的接口和类有Executor、Executors、ExecutorService、Callable、Future和BlockingQueue,这6个接口和类可如下理解:
﹒Executor:具体Runnable任务的执行者;
﹒Executors:提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口;
﹒ExecutorService:扩展了Executor并添加了一些生命周期管理的方法。一个ExecutorService的生命周期有三种状态:运行、关闭和终止。ExecutorService创建时处于运行状态,当调用ExecutorService.shutdown()后处于关闭状态,所有已添加的任务执行完毕后ExecutorService处于终止状态;
﹒Future:是与Runnable,Callable进行交互的接口,比如一个线程执行结束后取返回的结果等等,还提供了cancel终止线程;
﹒BlockingQueue:阻塞队列。
表格所示为代码示例:
package com.thread.test.concurent;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
i
相关文档:
package com;
import java.util.*;
public class WhatDay {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.setTime(new Date(System.currentTimeMillis()));
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
switch (dayOfWeek) {
ca ......
这一有关 Java 编程动态方面的新的系列文章研究了执行 Java 应用程序时幕后所发生的事情。企业 Java专家
Dennis Sosnoski 提供了 Java 二进制类格式以及在 JVM
内部类所发生的情况的内幕。接着,他将讨论类装入问题,其范围涉及从运行简单的 Java 应用程序所需的类的数量到可能造成 J2EE
及类似的复杂体系结构出现问题的 ......
命令行参数处理是一项令人厌烦的零碎工作,不管您过去已经处理过多少次了,它好像总能重新摆在您的面前。与其一遍又一遍地编写同
一块代码的不同变种,为什么不利用反射来简化参数处理的工作呢?Java 顾问 Dennis Sosnoski
向您展示了如何做到这一点。在本文中,Dennis 简明扼要地介绍了一个开源库,这个库可以使得命令行 ......
上学时很多问题的答案,可以从下文找到
JAVA语言学校的危险性
作者:Joel Spolsky
译者:阮一峰
原文: http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
译文地址:htt ......