进程和线程的区别
进程是操作系统资源分配的最小单位,包括CPU,磁盘io。一个app是一个进程,四大组件可以在清单文件中通过process指定所在进程。Android中启动一个进程,会创建一个主线程,即ui线程。
线程是CPU调度的最小单位,会共享进程中的所有资源,java多线程是通过CPU时间轮转机制实现的。
并行和并发
并行是同时执行,比如4核8线程,并行数为8
并发是跟时间有关,指单位时间内,执行的数量。java中是通过CPU时间轮转机制,交替执行任务。
启动线程的方式
继承Thread,重写run方法。
创建Thread对象,实现Runnable接口
重点
Thread是对线程的抽象
Runnable是对任务的抽象
FutureTask是实现了Runnable接口,因此并不是单独的启动线程的方式。
FutureTask
FutureTask实现了RunnableFuture,RunnableFuture继承Runnable和Future
源码
public interface RunnableFuture<V> extends Runnable, Future<V> {
void run();
}
public interface Future<V> {
…
V get() throws InterruptedException, ExecutionException;
…
}
使用
FutureTask<String> futureTask = new FutureTask(new Callable() {
@Override
public Object call() throws Exception {
Thread.sleep(3000);
return "haha";
}
});
Thread thread = new Thread(futureTask);
thread.start();
System.out.println("main");
String result = futureTask.get();
System.out.println("result=" + result);