您的位置:首页 > 编程语言 > Java开发

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;
}

}

执行测试类:
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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息