用J2SE1.5建立多任务的Java应用程序2

永盛人事96

永盛人事96

2016-02-19 12:31

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享用J2SE1.5建立多任务的Java应用程序2教程,希望对大家能有一点小小的帮助。

        Future和FutureTask

在Java的早期版本中,查询运行中的线程状态,以及使线程在执行之后返回一个值是非常困难的。由于run(运行)方法返回void,你必须编写大量的代码从线程中返回一个值。使用过这种方法的程序员肯定了解其痛苦的经历。

你可以使用Future接口或者FutureTask类从异步执行的线程中得到一个返回值。Future接口提供了检查计算过程是否完成、检索计算结果或终止计算过程的一些方法。FutureTask类提供了Future接口方法的基本实现(implementation)。只有计算过程完成以后才能检索结果;假如计算过程没有完成,get方法会被阻塞(block)。

下载代码中的MyStringReverser.java文件演示了FutureTask类的使用,并提供了一个轻易理解的示例。它以每秒钟一个字符的速度从后向前显示提交的字符串,同时主线程检测事务是否完成了:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

while(!future.isDone()){
  System.out.println("Task not yet completed.");
  try{
  Thread.currentThread().sleep(500);
  }catch(InterruptedException ie){
  System.out.println("Will check after 1/2 sec.");
  }
  }

在事务完成以后,就使用get方法从Future对象中检索结果:

System.out.println("Here is result..."+future.get());

ThreadPoolExecutor(线程池执行器)

有了ThreadPoolExecutor类之后你可以编写自己的服务器了。这个类为配置和调整服务器提供了很多的特性,与很多大规模的企业级EJB服务器相似。下面是它的一些配置参数:

核心和最大的线程池大小

通过把corePoolSize和maximumPoolSize设置为相同的值,你就可以建立一个大小固定的线程池了。通过把maximumPoolSize设置为一个极大的值(例如Integer.MAX_VALUE),你就可以答应线程池容纳任意数量的并发事务了。

根据需要构造

在默认情况下,只有在新事务要求的时候,ThreadPoolExecutor才开始建立和启动核心的线程,但是你可以使用prestartCoreThread或prestartAllCoreThreads动态地重载它。

保持活动的时间

假如线程池中当前线程的数量超过了corePoolSize,那么这些超过的线程的空闲时间大于keepAliveTime的时候,它们就会被终止。

排队

排队遵循下面的规则:

假如正在运行的线程数量少于corePoolSize,Executor总会添加新线程而不会排队。

假如corePoolSize或更多数量的线程在运行,Executor总会对请求进行排队而不会添加新线程。

假如某个请求不能参与排队,就会建立新线程,除非线程数量超过了maximumPoolSize(在超过的情况下,该事务会被拒绝)。

Hook方法

这个类提供了beforeExecute()和afterExecute() hook方法,它们分别在每个事务执行之前和之后被调用。为了使用它们,你必须建立这个类的子类(因为这些方法是受保护的)。

下载代码中的MyThreadPoolExecutor.java提供了一些监视多种配置参数的具体示例。你可以发现随着每个事务的增加和完成,线程池和队列大小在不断变化。你可以修改代码中的设置信息。 并发集合

JDK 1.5提供了下面一些集合实现,它们是被设计为用于多线程环境的:

ConcurrentHashMap

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

CopyOnWriteArrayList

CopyOnWriteArraySet

ConcurrentHashMap类为检索和更新(update)可调整的预期的并发性提供了完整的线程安全的(thread-safe)并发性支持。CopyOnWriteArraySet是一组线程安全的变量集合,CopyOnArrayList是一个线程安全的数组列表(ArrayList)变量。在修改原始的数组或集合之前,它们中的每一个都会把下层的数组或集合复制一份。其结果是,读取的速度很快,而更新的速度很慢。

展开更多 50%)
分享

猜你喜欢

用J2SE1.5建立多任务的Java应用程序

编程语言 网络编程
用J2SE1.5建立多任务的Java应用程序

用J2SE1.5建立多任务的Java应用程序2

编程语言 网络编程
用J2SE1.5建立多任务的Java应用程序2

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

J2SE1.5 注释语法

Java JAVA基础
J2SE1.5 注释语法

“老虎”来了 J2SE1.5新功能一览

编程语言 网络编程
“老虎”来了 J2SE1.5新功能一览

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用J2ME MIDP开发无线应用程序

编程语言 网络编程
用J2ME MIDP开发无线应用程序

如何掌握Java(J2SE篇)

编程语言 网络编程
如何掌握Java(J2SE篇)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

使用xmlHttp结合ASP实现网页的异步调用

使用xmlHttp结合ASP实现网页的异步调用

原来爱情从来么有离开 - QQ情侣分组

原来爱情从来么有离开 - QQ情侣分组
下拉加载更多内容 ↓