java多线程编程要点(三)

JDK1.5之前,对高质量Java多线程并发程序设计时,为防止程序崩掉等现象的出现,比如使用wait()notify()synchronized等,需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等诸多因素,通常会采用一些较为复杂的安全策略,加重了程序员的开发负担。在JDK1.5出现之后,大牛Doug Lee编写了java.util.concurrent java并发工具包,开发者利用此包,可大大提高并发程序的开发效率,并且能有效防止资源竞争、状态一致和避免死锁。java.util.concurrent包分成了三个部分,分别是java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks。内容涵盖了并发集合类、线程池机制、同步互斥机制、线程安全的变量更新工具类、锁等常用工具。

1) java.util.concurren:其主要的接口和类有ExecutorExecutorsExecutorServiceCallableFutureBlockingQueue,这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;

import java.util.concurrent.RejectedExecutionException;

import junit.framework.TestCase;

/**

*

* <p>Description:concurrentExecutors,ExecutorService等的简单应用Case</p>

* @author 乡台瑞猿

* @version $Id: ExecutorTest.java,v 0.1 Feb 21, 2010 4:09:59 PM Exp $

*/

public class ExecutorTest extends TestCase{

/**

* <p>Executors类,提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。

* Executor.execute(Runnalbe),Executor在执行时使用内部的线程池完成操作</p>

* @author 乡台瑞猿

* @date Feb 21, 2010 4:12:28 PM

*/

public void ftestExecutor(){

Executor executor = Executors.newFixedThreadPool(10);

System.out.println();

System.out.println("Test case: "+this.getName());

Runnable task = new Runnable() {

public void run() {

System.out.println("Exceutor exec runable.");

}

};

executor.execute(task);

/****************执行结果****************

*Test case: testExecutor

*Exceutor exec runable.

* *************************************/

}

/**

* <p>扩展了Executor并添加了一些生命周期管理的方法。一个ExecutorService的生命周期有三种状态:

* 运行、关闭和终止。ExecutorService创建时处于运行状态,当调用ExecutorService.shutdown()

* 后处于关闭状态,所有已添加的任务执行完毕后ExecutorService处于终止状态</p>

* @author 乡台瑞猿

* @date Feb 21, 2010 4:44:41 PM

*/

public void ftestExecutorService(){

Executor executor = Executors.newFixedThreadPool(10);

ExecutorService executorService = (ExecutorService) executor;

//

System.out.println();

System.out.println("Test case: "+this.getName());

Runnable task = new Runnable() {

public void run() {

System.out.println("ExecutorService exec runable.");

}

};

//

System.out.println("executorService.isShutdown() = "+executorService.isShutdown());

System.out.println("executorService.isTerminated() = "+executorService.isTerminated());

while (!executorService.isShutdown()) {

try {

executorService.execute(task);

executorService.shutdown();

} catch (RejectedExecutionException ignored) { }

}

System.out.println("executorService.isShutdown() = "+executorService.isShutdown());

System.out.println("executorService.isTerminated() = "+executorService.isTerminated());

/****************执行结果****************

*Test case: testExecutorService

*executorService.isShutdown() = false

*executorService.isTerminated() = false

*executorService.isShutdown() = true

*executorService.isTerminated() = false

*ExecutorService exec runable.

*或者

*Test case: testExecutorService

*executorService.isShutdown() = false

*executorService.isTerminated() = false

*ExecutorService exec runable.

*executorService.isShutdown() = true

*executorService.isTerminated() = true

* *************************************/

//从中可以看出executorService等所有已添加的任务执行完毕之后才Terminated

}

text-align: left; line-height

分享到:
评论
isiqi
  • 浏览: 4160247 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

你可能感兴趣的:(java,多线程,thread,编程,JUnit)