- 浏览: 780144 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (256)
- ssh (18)
- webservice (8)
- java基础 (38)
- j2EE方方面面 (17)
- 随意涂鸭!呵呵 (2)
- 数据库 (22)
- work (10)
- XML与XML解析 (9)
- 测试 (2)
- sso (1)
- ldap (6)
- java 模板技术 (4)
- 版本管理 (1)
- 每日小点滴 (26)
- javascript (26)
- Jakarta Commons (2)
- css (6)
- 设计 (3)
- Eclipse插件开发 (3)
- BAP (3)
- web控件 (2)
- java加密解密 (4)
- 调优 (6)
- 界面技术 (3)
- java多线程 (6)
- 互联网 (2)
- 日志管理 (4)
- java调度 (3)
- rest (0)
- Python (2)
- mobile (2)
- 2016的故事 (4)
- Docker (1)
- NOSQL_Hadoop (0)
最新评论
-
promiseloney:
这个女程序员厉害了。。。
JVM调优:GC 参数 -
zxjlwt:
可以通过WebService上传一个文件吗?素人派http:/ ...
webservice传送XML大小估算 -
liaoshaoyang:
写的不错嘛 可以做参考
权限管理设计一 -
aaaaaaaaabaas:
谢谢,对我有帮助
Apache Commons Configuration使用入门 -
Jack_Wilshere:
com.smartdot.pdm.business.corp. ...
java导出txt
转载自: http://auguslee.iteye.com/blog/1292335
Callable 和 Runnable 的使用方法大同小异, 区别在于:
1.Callable 使用 call() 方法, Runnable 使用 run() 方法
2.call() 可以返回值, 而 run()方法不能返回。
3.call() 可以抛出受检查的异常,比如ClassNotFoundException, 而run()不能抛出受检查的异常。
Callable示例如下:
执行结果
Runnable示例:
执行结果
注意ExecutorService 在Callable中使用的是submit(), 在Runnable中使用的是 execute()
1.Callable 使用 call() 方法, Runnable 使用 run() 方法
2.call() 可以返回值, 而 run()方法不能返回。
3.call() 可以抛出受检查的异常,比如ClassNotFoundException, 而run()不能抛出受检查的异常。
Callable示例如下:
class TaskWithResult implements Callable<String> { private int id; public TaskWithResult(int id) { this.id = id; } @Override public String call() throws Exception { return "result of TaskWithResult " + id; } } public class CallableTest { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService exec = Executors.newCachedThreadPool(); ArrayList<Future<String>> results = new ArrayList<Future<String>>(); //Future 相当于是用来存放Executor执行的结果的一种容器 for (int i = 0; i < 10; i++) { results.add(exec.submit(new TaskWithResult(i))); } for (Future<String> fs : results) { if (fs.isDone()) { System.out.println(fs.get()); } else { System.out.println("Future result is not yet complete"); } } exec.shutdown(); } }
执行结果
result of TaskWithResult 0
result of TaskWithResult 1
result of TaskWithResult 2
result of TaskWithResult 3
result of TaskWithResult 4
result of TaskWithResult 5
result of TaskWithResult 6
result of TaskWithResult 7
result of TaskWithResult 8
result of TaskWithResult 9
result of TaskWithResult 1
result of TaskWithResult 2
result of TaskWithResult 3
result of TaskWithResult 4
result of TaskWithResult 5
result of TaskWithResult 6
result of TaskWithResult 7
result of TaskWithResult 8
result of TaskWithResult 9
Runnable示例:
public class LiftOff implements Runnable { protected int countDown = 10; private static int taskCount = 0; private final int id = taskCount++; public LiftOff() { } public LiftOff(int countDown) { this.countDown = countDown; } public String status() { return "#" + id + "(" + (countDown > 0 ? countDown : "LiftOff! ") + ")"; } @Override public void run() { while (countDown-- > 0) { System.out.print(status()); Thread.yield(); } System.out.println(); } public static void main(String[] args) { ExecutorService exec = Executors.newFixedThreadPool(1); for (int i = 0; i < 5; i++) { exec.execute(new LiftOff()); } exec.shutdown(); } }
执行结果
#0(9)#0(8)#0(7)#0(6)#0(5)#0(4)#0(3)#0(2)#0(1)#0(LiftOff! )
#1(9)#1(8)#1(7)#1(6)#1(5)#1(4)#1(3)#1(2)#1(1)#1(LiftOff! )
#2(9)#2(8)#2(7)#2(6)#2(5)#2(4)#2(3)#2(2)#2(1)#2(LiftOff! )
#3(9)#3(8)#3(7)#3(6)#3(5)#3(4)#3(3)#3(2)#3(1)#3(LiftOff! )
#4(9)#4(8)#4(7)#4(6)#4(5)#4(4)#4(3)#4(2)#4(1)#4(LiftOff! )
#1(9)#1(8)#1(7)#1(6)#1(5)#1(4)#1(3)#1(2)#1(1)#1(LiftOff! )
#2(9)#2(8)#2(7)#2(6)#2(5)#2(4)#2(3)#2(2)#2(1)#2(LiftOff! )
#3(9)#3(8)#3(7)#3(6)#3(5)#3(4)#3(3)#3(2)#3(1)#3(LiftOff! )
#4(9)#4(8)#4(7)#4(6)#4(5)#4(4)#4(3)#4(2)#4(1)#4(LiftOff! )
注意ExecutorService 在Callable中使用的是submit(), 在Runnable中使用的是 execute()
发表评论
-
Redis command
2019-07-05 09:43 0redis-cli -v : 查看redis version ... -
Spring Boot Actuator
2018-07-24 13:46 701Spring Boot : 2.0.3 POM文件中加入 ... -
java线程安全问题之静态变量、实例变量、局部变量
2017-07-04 14:50 488转载 java多线程编 ... -
关于CXF的FrontEnd和数据绑定方案
2013-06-17 11:45 1128转载自:http://blog.csdn.net/blui ... -
webservice传送XML大小估算
2013-06-06 12:22 77532013-06-06 某天,要做几个WebService, ... -
java-HashSet源码学习
2013-06-05 15:22 813HashSet: 不支持多线程 ... -
Java @override报错的解决方法 .
2013-04-28 09:59 820有时候Java的Eclipse工程换一台电脑后编译总是@ov ... -
myeclipse中的classpath .
2013-04-03 10:32 14945myeclipse中的classpath是 ... -
int i 引出JVM故事
2013-02-27 18:47 764public class TestDuanqf { ... -
java调度:(五) 用户自定义调度策略+spring+quartz
2013-02-22 18:21 0一般应该中,quartz的调度策略都是在xml配置文件中设 ... -
java内存系列:测试JDK最大内存
2013-02-22 18:09 1902JDK各个版本在不同操作系统中支持的最大内存是不一样的,但是可 ... -
java调度:(三)Timer中的单线程守护
2013-02-22 15:39 3623早听说Timer中是单守护 ... -
日志管理(一):slf4j原理简单介绍
2013-01-24 18:44 3052转载自:http://blog.sina.com.cn/s ... -
concurrent: wai notify notifyAll
2013-01-09 10:16 837转载自:http://sishuok.com ... -
JDK5--Annotation学习:基础(二)
2012-12-04 19:56 1033转载自:http://www.iteye.com/topic/ ... -
JDK5--Annotation学习:基础(一)
2012-12-04 19:29 1102转载连接:http://www.iteye.com/topic ... -
concurrent: ThreadPoolExecutor 用法
2012-09-03 15:19 2997thread pool一般被用来 ... -
java调度:(六)quarts_cron表达式
2012-07-31 13:59 1259七个域要记住,从左到 ... -
java压缩----使用sun JDK压缩--中文的文件名会是乱码
2012-07-13 14:27 1285经测试,文件名为中文 ... -
java 附件
2012-07-12 15:47 0转载: java下载附件方法: Java ...
相关推荐
在这个"Java-Concurrent:一个使用可调用的和将来的任务实现斐波那契的简单程序"中,我们将深入探讨如何使用Java的并发工具来解决计算密集型问题,如计算斐波那契数列。 斐波那契数列是一个经典的数学问题,它的每一...
Callable接口位于`java.util.concurrent`包下,它的主要方法是`call()`,这个方法相当于Runnable的`run()`,但`call()`可以有返回值和抛出异常。当我们需要在线程中执行一个计算任务并获取结果时,Callable就非常...
在`java-concurrent-master`这个项目中,你可能会看到各种示例代码,展示如何使用上述组件来解决并发问题,例如线程池的创建和使用,线程间的同步与通信,以及并发集合的实战应用等。通过这些实例,你可以更好地理解...
1. **Java并发API**: 这个资源可能涵盖了Java的并发库,包括`java.util.concurrent`包中的类和接口,如`ExecutorService`, `Future`, `Callable`, `ThreadLocal`, `Semaphore`, `CyclicBarrier`, `CountDownLatch`, ...
Java的`wait()`、`notify()`和`notifyAll()`方法用于线程间的通信,但它们必须在同步块或同步方法中使用,以防止死锁和其他并发问题。 9. **并发设计模式** 了解如生产者消费者模型、读者写者模式、双检锁/双重...
这些接口允许异步计算并获取结果,Callable可以返回一个结果,而Future则提供了检查任务完成状态和获取结果的方法。 5. **ScheduledExecutorService的早期实现:ScheduledThreadPool** - 对于定时任务的执行,...
"java-concurrent"这个项目显然聚焦于Java并发编程的实践与学习,特别是通过马士兵老师的高并发视频课程的源码进行深入研究。JUC,全称Java Util Concurrency,是Java平台标准版(Java SE)的一部分,提供了丰富的...
源码中可能包含这些方法的使用,以协调线程的执行顺序。 9. **Future和Callable**:`Future`接口表示异步计算的结果,而`Callable`接口用于定义计算任务。源码将展示如何利用这两个接口进行异步编程和获取计算结果...
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用...Callable是需要使用java.util.concurrent.ExecutorService.submit(Callable)方
在Java SE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表示的是从方法call()中返回的值,并且必须使用ExecutorService.submit()方法调用它。 import java.util.ArrayList; import java.util....
要实现Callable接口,需要重写call()方法,该方法返回一个值。例如: ```java import java.util.concurrent.Callable; public class MyCallable implements Callable<Integer> { @Override public Integer call()...
### Java的Concurrent包用法详解 #### 一、引言 在Java 1.5之前,为了实现多线程的并发操作,开发者通常需要手动编写复杂的代码来处理线程间的同步问题,如使用`synchronized`关键字、`wait()`与`notify()`方法等。...
2. **Executor框架**:`java.util.concurrent.Executor`是执行任务的核心接口,它定义了运行任务的方法。`ExecutorService`是Executor的一个子接口,提供了管理和控制执行器的额外功能,如`shutdown()`用于关闭执行...
Java的`java.util.concurrent.Executors`类提供了几个方法来转换其他形式的对象为Callable。例如,可以使用`Executors.callable(Runnable task, V result)`将一个Runnable转换为Callable,这样Runnable的任务就可以...
通过这份中文版的`java.util.concurrent`用户指南,读者可以深入理解这些并发工具的使用方法和原理,提升在多线程环境下的编程能力。书签功能使得学习更加便捷,能够快速定位到感兴趣的章节或知识点,对Java并发编程...
Java提供了两种方式实现线程同步机制,分别是使用synchronized关键字和java.util.concurrent.locks.Lock接口。 线程池的应用: 线程池技术可以应用于Web服务系统中,控制服务器系统的最大并发数与最多处理的任务数...
Java.util.concurrent的引入是为了解决传统并发原语如wait()、notify()、synchronized和volatile的使用难度大、容易出错以及性能问题。 在并发编程中,我们经常会遇到需要管理多个线程执行任务的情况。传统的做法是...
此外,移除元素也有类似的四种方法:`remove()`, `poll()`, `take()` 和 `poll(timeout, timeUnit)`。 ##### 3.3 阻塞队列实现 `BlockingQueue` 是一个接口,实际使用时需要选择具体的实现类。Java 6 中提供的实现...
第一个是edu.ncsu.mhthakka.concurrent.callable.mergesort.CallableMergeSorter这是一个实现合并排序的类。 它使用java的Callable API。 这种方法需要太多线程,因为Future.get()方法是一个阻塞调用。 对于要在...
- **Future与Callable**:`Future`代表异步计算的结果,`Callable`是一个可以返回结果的接口,常用于与`ExecutorService`结合使用。 #### 2. Concurrent集合 - **ConcurrentHashMap**:一种线程安全的哈希表实现,...