Java中可返回值的任务(线程)必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。
示例代码
package com.ajita;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class TestCallable {
public static void main(String[] args) throws ExecutionException,
InterruptedException {
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(2);
// 创建两个有返回值的任务
Callable c1 = new MyCallable("A");
Callable c2 = new MyCallable("B");
// 执行任务并获取Future对象
Future f1 = pool.submit(c1);
Future f2 = pool.submit(c2);
// 从Future对象上获取任务的返回值,并输出到控制台
System.out.println(">>>" + f1.get().toString());
System.out.println(">>>" + f2.get().toString());
// 关闭线程池
pool.shutdown();
}
}
class MyCallable implements Callable<Object> {
private String oid;
MyCallable(String oid) {
this.oid = oid;
}
public Object call() throws Exception {
return oid + "任务返回的内容";
}
}
分享到:
相关推荐
总之,要实现有返回值的线程,我们可以使用Java的`Callable`接口和`Future`、`ExecutorService`等工具,这些机制允许我们在异步环境中获取任务执行的结果。对于`jdbctest`,可能包含的是使用JDBC进行数据库操作的多...
NULL 博文链接:https://icgemu.iteye.com/blog/467848
Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java线程:新特征-信号量 Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征...
然后,我们将数据库操作封装为`Callable`任务,因为`Callable`可以返回结果,适合于数据库操作这种有返回值的操作。 ```java public class DatabaseTask implements Callable<Void> { private Connection ...
大家都知道Runnable和Callable接口都可以作为其他线程执行的任务,但是Runnable接口的run方法没有返回值,而Callable接口的call方法有返回值,那么Callable接口是如何做到的呢?在此我给出一个Demo,看看通过...
Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:...
除了上述创建线程的方式,Java还提供了Callable和Future接口,用于创建带返回值的线程,以及ExecutorService和ThreadPoolExecutor等高级线程管理工具,以更灵活地控制线程的执行和管理。 在实际开发中,理解和掌握...
1. 创建Callable接口的实现类,并实现call()方法,该call()方法将作为该线程的执行体,且该call()方法有返回值,再创建Callable的实例。从Java 8开始,可以直接使用Lamda表达式创建Callable对象。 2. 使用...
- **有返回值的线程**:通过`Callable`和`Future`实现线程的返回值,提供了更灵活的异步编程模型。 - **锁**:高级锁机制如`ReentrantLock`,提供了比`synchronized`更灵活的锁定策略。 - **信号量**:控制对有限...
4. **线程优先级与守护线程**:Java线程有优先级之分,可以影响调度,但实际效果取决于操作系统。守护线程(Daemon Thread)是一种特殊类型的线程,当它是系统中唯一运行的线程时,JVM会自动退出。 5. **并发集合与...
Java 5及以后版本引入了更多的并发工具,如线程池、Future和Callable接口支持有返回值的线程,锁的高级形式如读写锁、可重入锁,还有Semaphore(信号量)、BlockingQueue(阻塞队列)、BlockingStack(阻塞栈)、...
Java线程有五种状态:新建、可运行、运行、阻塞和终止。可以通过Thread类的getState()方法查看线程状态。线程的控制包括: - sleep():使当前线程进入休眠状态,指定时间后自动唤醒。 - join():让当前线程等待另一...
Java 中的多线程新特征包括 volatile 关键字、信号量、阻塞队列、条件变量、线程池、有返回值的线程等。volatile 关键字可以用于变量的同步,信号量可以用于线程之间的通信,阻塞队列可以用于线程之间的数据传递,...
Java线程有10个优先级,从Thread.MIN_PRIORITY(1)到Thread.MAX_PRIORITY(10),但实际操作中,优先级的影响力并不大,操作系统调度策略可能会忽略优先级。 总之,理解和掌握Java多线程结构对于编写高效的并发...
- **优先级**:线程有优先级,`Thread.setPriority()`设置优先级,高优先级线程更可能获得执行机会。 - **让步**:`Thread.yield()`让当前线程放弃CPU使用权。 - **合并**:多个线程可以合并为一个线程组,便于管理...
3. **线程状态**:线程有多种状态,包括新建、可运行、运行、阻塞和死亡。理解这些状态对于管理线程至关重要。 4. **线程同步**:为避免多线程环境下的数据竞争,Java提供了多种同步机制,如`synchronized`关键字、...