线程
创建:
1 继承Thread类
2 实现Runnable接口
3 实现Callable接口,通过FutureTask包装器实现(有返回值)
public class CallableDemo implements Callable {
@Override
public Object call() throws Exception {
int sum=0;
for (int i = 0; i < 100; i++) {
System.out.println(i);
sum+=i;
}
return sum;
}
}
CallableDemo cd = new CallableDemo();
FutureTask ft = new FutureTask(cd);
new Thread(ft).start();
System.out.println(ft.get());
4 使用线程池(开发最常用)
好处:减少资源消耗 提高运行速度 便于管理
实现方式:可以通过Runnable和Callable实现
public class CallableDemo implements Callable {
@Override
public Object call() throws Exception {
int sum=0;
for (int i = 0; i < 100; i++) {
System.out.println(i);
sum+=i;
}
return sum;
}
}
// 通过Executors.newFixedThreadPool()来创建一个可以装下10个线程的池子ExecutorService对象。。
ExecutorService executorService = Executors.newFixedThreadPool(10);
//如果想要设置线程池的一些属性,可以将executorService强转为ThreadPoolExecutor
// ThreadPoolExecutor的父类AbstractExecutorService实现了ExecutorService接口
ThreadPoolExecutor serivce= (ThreadPoolExecutor) executorService;
// 通过executorService.submit创建一个future类型的对象
// executorService.execute();可以创建一个Runnable类型的线程..
FutureTask submit = (FutureTask) serivce.submit(new CallableDemo());
System.out.println(submit.get());
// 关闭线程池..必须调用,如果不关闭线程池,则该线程会一直存在。。
executorService.shutdown();



