Java创建线程的四种实现方式
2017-11-10 14:57
661 查看
1.继承Thread类
2.实现Runnable接口
3.实现Callable接口,通过FutureTask包装器来创建线程package cn.sh;
import java.util.concurrent.Callable;
public class MyCallableThread implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int count = 0;
for (int i = 1; i <= 10; i++) {
count += i;
System.out.println("count=="+count);
}
return count;
}
}
执行测试类:
count==3
count==6
count==10
count==15
count==21
count==28
count==36
count==45
count==55
Thread Name=main
sum = 55
4.使用线程池(ExecutorService)创建线程,代码实例(rt.jar中):package cn.sh;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class MyTestCallable {
public static void main(String[] args) {
MyCallableThread mThread = new MyCallableThread();
// 执行Callable方式,需要FutureTask实现类的支持,用于接收运算结果
// FutureTask<Integer>是一个包装器
FutureTask<Integer> oneTask = new FutureTask<Integer>(mThread);
//由FutureTask<Integer>创建一个Thread对象:
Thread oneThread = new Thread(oneTask);
oneThread.start();
// 接收线程运算后的结果
Integer sum =0;
try {
// 等所有线程执行完,获取执行结果,因此FutureTask可用于闭锁
sum = oneTask.get();
System.out.println("Thread Name="+Thread.currentThread().getName());
System.out.println("sum = "+sum);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
2.实现Runnable接口
3.实现Callable接口,通过FutureTask包装器来创建线程package cn.sh;
import java.util.concurrent.Callable;
public class MyCallableThread implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int count = 0;
for (int i = 1; i <= 10; i++) {
count += i;
System.out.println("count=="+count);
}
return count;
}
}
执行测试类:
public class MyTestCallable { public static void main(String[] args) { MyCallableThread mThread = new MyCallableThread(); // 执行Callable方式,需要FutureTask实现类的支持,用于接收运算结果 // FutureTask<Integer>是一个包装器 FutureTask<Integer> oneTask = new FutureTask<Integer>(mThread); //由FutureTask<Integer>创建一个Thread对象: Thread oneThread = new Thread(oneTask); oneThread.start(); // 接收线程运算后的结果 Integer sum =0; try { // 等所有线程执行完,获取值,因此FutureTask 可用于闭锁 sum = oneTask.get(); System.out.println("-----------------------------"); System.out.println("sum = "+sum); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } }运行结果:count==1
count==3
count==6
count==10
count==15
count==21
count==28
count==36
count==45
count==55
Thread Name=main
sum = 55
4.使用线程池(ExecutorService)创建线程,代码实例(rt.jar中):package cn.sh;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class MyTestCallable {
public static void main(String[] args) {
MyCallableThread mThread = new MyCallableThread();
// 执行Callable方式,需要FutureTask实现类的支持,用于接收运算结果
// FutureTask<Integer>是一个包装器
FutureTask<Integer> oneTask = new FutureTask<Integer>(mThread);
//由FutureTask<Integer>创建一个Thread对象:
Thread oneThread = new Thread(oneTask);
oneThread.start();
// 接收线程运算后的结果
Integer sum =0;
try {
// 等所有线程执行完,获取执行结果,因此FutureTask可用于闭锁
sum = oneTask.get();
System.out.println("Thread Name="+Thread.currentThread().getName());
System.out.println("sum = "+sum);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
相关文章推荐
- Java并发学习之四种线程创建方式的实现与对比
- Java核心内库-线程-通过实现Runnable接口的方式创建并启动线程
- java创建线程的三种实现方式
- Java多线程:创建线程的两种实现方式
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- java并发——四种创建线程方式
- java创建线程的四种方式
- java创建线程的第二种方式:实现Runnable接口
- java创建线程的四种方式
- 创建java线程方式之三实现Callable接口
- java多线程 -- 创建线程的第三者方式 实现Callable接口
- 牛客网Java刷题知识点之四种不同的方式创建线程
- JAVA线程的应用实例(运用2种中断线程方式,基于实现进度条为例)
- Java中线程实现的两种方式例程
- java多线程总结一: 线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- JAVA线程的应用实例(运用2种中断线程方式,基于实现进度条为例)
- Java事件处理机制- 事件监听器的四种实现方式
- Java【多线程知识总结(4)】通过实现Runnable接口创建线程