- 浏览: 197518 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wentry:
java中字符带有斜杠时,比如\\x00\\x00\\x00\ ...
java中调用js脚本 -
chenzheng8975:
...
ajax -
蓝色飞扬:
有用,也碰到这个问题了,多谢!
java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion -
刘宇斌:
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发 -
moxiaomomo:
同样的疑问啊...对tomcat缓存仍然一知半解...
tomcat 缓存
java.util.concurrent.Callable与java.util.concurrent.Future类可以协助您完成Future模式。Future模式在请求发生时,会先产生一个Future对象给发出请求的客户。它的作用类似于代理(Proxy)对象,而同时所代理的真正目标对象的生成是由一个新的线程持续进行。真正的目标对象生成之后,将之设置到Future之中,而当客户端真正需要目标对象时,目标对象也已经准备好,可以让客户提取使用。
关于Future模式的说明,可以参考:
http://caterpillar.onlyfun.net/Gossip/DesignPattern/FuturePattern.htm
Callable是一个接口,与Runnable类似,包含一个必须实现的方法,可以启动为让另一个线程来执行。不过Callable工作完成后,可以传回结果对象。Callable接口的定义如下:
public interface Callable<V> { V call() throws Exception; } |
例如,可以使用Callable完成某个费时的工作,工作结束后传回结果对象,例如求质数范例15.24:
范例15.24 PrimeCallable.java
package onlyfun.caterpillar; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable;
public class PrimeCallable implements Callable<int[]> {
for(int i = 2; i <= max; i++)
for(int i = 2; i*i <= max; i++) { // 这里可以改进
for(int i = 2; i < max; i++) { |
程序中的求质数方法是很简单的,但效率不好,这里只是为了示范方便,才使用简单的求质数方法,要更有效率地求质数,可以参考Eratosthenes筛选求质数:
http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/EratosthenesPrime.htm
假设现在求质数的需求是在启动PrimeCallable后的几秒之后,则可以使用Future来获得Callable执行的结果,从而在未来的时间点获得结果,例如范例15.25:
范例15.25 FutureDemo.java
package onlyfun.caterpillar; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class FutureDemo { public static void main(String[] args) { Callable<int[]> primeCallable = new PrimeCallable(1000); FutureTask<int[]> primeTask = new FutureTask<int[]>(primeCallable); Thread t = new Thread(primeTask); t.start(); try { // 假设现在做其他事情 Thread.sleep(5000); // 回来看看质数找好了吗 if(primeTask.isDone()) { int[] primes = primeTask.get(); for(int prime : primes) { System.out.print(prime + " "); } System.out.println(); } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } |
java.util.concurrent.FutureTask是一个代理,真正执行找质数功能的是Callable对象。使用另一个线程启动FutureTask,之后就可以做其他的事了。等到某个时间点,用isDone()观察任务是否完成,如果完成了,就可以获得结果。一个执行结果如下,显示所有找到的质数:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 |
用户可能需要快速翻页浏览文件,但在浏览到有图片的页数时,由于图片文件很大,导致图片加载较慢,造成用户浏览文件时会有停顿的现象。因此希望在文件开启之后,仍有一个后台作业持续加载图片。这样,用户在快速浏览页面时,所造成的停顿可以获得改善,从而可以考虑使用这里所介绍的功能
发表评论
-
java 修饰符
2009-10-31 16:37 1413Java语言定义了public、protected、priva ... -
Java虚拟机 堆
2009-10-25 22:27 1112Java程序在运行时创建的所有类实例或者数组都放在堆 ... -
Java虚拟机 方法区
2009-10-25 21:09 1855对于被装载的每个类,虚拟机都会把这个类的类型信息存储在方法区, ... -
Java虚拟机 体系结构
2009-10-25 21:03 1248当一个Java虚拟机运行一 ... -
java中调用js脚本
2009-10-16 18:27 14945JDK1.6加入了对Script(JSR ... -
Java 位运算
2009-09-28 16:43 5047Java 位运算[转] 一,Java 位运算 ... -
拾遗补缺-jdk6新特性
2009-08-09 17:13 12761,输出到文件 java Hello.java > he ... -
拾遗补缺-ResourceBundle
2009-08-08 23:54 2509http://gceclub.sun.com.cn/Java_ ... -
拾遗补缺-logger
2009-08-08 23:33 1188java.util.logging.Logger的使用 20 ... -
拾遗补缺-date
2009-08-08 23:22 995DateFormat 来格式化日期 2009年01月21日 ... -
classloader
2009-08-08 22:53 1135什么是ClassLoader ClassLoader是一个抽 ... -
concurren套件(转载)
2009-08-08 22:31 1305从J2SE 5.0开始有了java.util.concurre ... -
java多线程转载
2009-08-07 18:06 1160Java Thread API 允许程序员编写具有多处理机制优 ... -
java字符集
2009-08-04 17:05 1952ASCII 字符集 1.名称的由来 ASCII( ... -
ajax
2007-09-22 18:12 1567今天第一 ... -
Ajax链接servlet的一个注意事项
2007-09-23 18:02 899这是我用到的一段代码: createXMLHttpReq ... -
tomcat 缓存
2007-09-24 19:28 1516今天写项目的时候遇到一个问题: 就是当打印自定义异常的时候一 ... -
如何用javascript控制checkbox,并进行批量删除
2007-09-24 19:51 1737在做系统数据删除的时候,往往需要批量删除一些数据,如何做到呢? ... -
用servlet filter 解决编码问题的一个小例子
2007-09-24 20:02 1228当在做程序的是你也许会遇到一些很让你恼火的乱码问 ... -
转发和重定向的区别的一点理解
2007-09-24 21:54 1005他们的调用分别如下例: request.getRequest ...
相关推荐
Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...
与Runnable接口不同,Callable可以有返回值,而且能够抛出异常。当我们需要在线程执行过程中获取某些计算结果时,Callable就非常适用。下面是一个简单的Callable示例: ```java public class MyTask implements ...
Java并发编程Callable与Future的应用实例代码 在Java并发编程中,Callable与Future是两个非常重要的概念,它们通常结合使用来实现异步编程。在本文中,我们将详细介绍Callable与Future的应用实例代码,并探究它们在...
在实际开发中,ExecutorService(如ThreadPoolExecutor)经常与Future和FutureTask一起使用,因为ExecutorService可以提交Runnable或Callable任务,并返回Future,从而实现对任务的异步处理和结果获取。例如: ```...
Callable,Future的使用方式,里面使用了三种使用方式分别是FutureTask,ExecutorService,ExecutorCompletionService
Callable 接口与 Runnable 相比,具有以下特点: 1. **方法不同**:Callable 接口中定义了 `call()` 方法,而 Runnable 接口中有 `run()` 方法。 2. **返回值**:Callable 的 `call()` 方法可以返回一个泛型结果 V,...
Callable 和 Future 是 Java 多线程编程中两个重要的接口,它们在处理异步计算和结果获取方面发挥着关键作用。Callable 与 Runnable 相似,但具有更强大的功能,允许任务返回结果并处理异常。 Callable 接口: ...
Future<Integer> future1 = threadPool.submit(new Callable() { public Integer call() throws Exception { return computeSomething1(); } }); Future<Integer> future2 = threadPool.submit(new Callable...
自留demo,主要是Thread-Callable-Future的基本实现。 参考文章: 1、深入理解Callable https://blog.csdn.net/qq_19431333/article/details/77483763 2、彻底理解Java的Future模式: ...
"Java多线程Callable和Future接口区别" Java多线程Callable和Future接口是Java语言中两个非常重要的接口,它们都是Java多线程编程中使用的接口,用于描述异步计算的结果。在JavaSE5中引入的Callable是一个具有类型...
Runnable、Callable、Future、FutureTask有什么关联.docx
通过合规策略对服务器进行监控,确保服务器的运行、帐号在服务器上的操作符合预设的规则。日志:收集、整理服务器的日志信息,提供给管理员查看,并作为异常判断、故障排查的依据。进程:监控服务器上的进程,并对...
Java并发编程中的ExecutorService、Callable和Future Java并发编程中,ExecutorService、Callable和Future是三大核心组件,它们之间紧密相连,共同实现了高效、安全的并发编程。下面我们将详细介绍这些组件的作用和...
在Java中,实现多线程有四种主要方式:继承Thread类、实现Runnable接口、使用ExecutorService和使用Callable与Future。下面将详细阐述这四种方式。 1. 继承Thread类 当你需要创建一个新的线程类时,可以继承Thread...
在Java中,实现多线程有四种主要方法:继承Thread类、实现Runnable接口、使用ExecutorService和使用Callable与Future。下面将详细探讨这四种方式。 1. 继承Thread类 在Java中,我们可以直接继承Thread类并重写其run...
2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...
Callable接口与Runnable接口类似,但它具有一个泛型方法`call()`,该方法在执行时会返回一个结果,并可能抛出异常。Callable接口的定义如下: ```java public interface Callable<V> { V call() throws Exception;...
Java通过Callable和Future来接收线程池的执行结果 Java中的线程池执行结果获取一直是一个棘手的问题,对于直接继承Thread的方式或实现Runnable接口的方式,都无法获取到线程执行的返回结果。如果线程在执行过程中...
Java concurrency线程池之Callable和Future Java concurrency是一个重要的概念,在Java编程中,线程池是一个关键组件。今天,我们将详细介绍Java concurrency线程池之Callable和Future,这两个组件在Java并发编程中...
`Future`、`FutureTask`、`Callable`和`Runnable`是Java并发编程中的核心接口和类,它们在Android开发中同样有着广泛的应用。下面将详细介绍这些概念以及它们如何协同工作。 1. `Runnable`: 这是Java中最基础的多...