舒适提示:阅读本文须要5-6分钟(少许代码)
公众号:顾林海(天天更新优质文章)java
今天,咱们来解决一个问题:web
并发、并行傻傻分不清楚?线程的一辈子都经历些什么?编程
人生一切难题,知识给你答案。并发
==并发与并行==异步
并发是指在某个时间段内,多任务交替处理的能力。并行是指同时处理多任务的能力。ide
案例:商场销售员须要面对多位顾客时,有的顾客问价格,有的顾客问质量,这时销售员须要不断的回答顾客,中间不停的切换话题并记住以前的话题,方便回过头回答,这种方式能够理解为并发,若是有多位销售员对应多位顾客,多位销售员同时回答顾客问题,这种方式就是并行。spa
==线程的生命周期==线程
线程是CPU调度和分配的基本单位。线程能够拥有本身的操做栈、程序计数器、局部变量表等资源,它与同一进程内的其余线程共享该进程的全部资源。code
线程的建立有三种方式,第一种是继承自Thread类,以下所示:cdn
public class HandlerThread extends Thread {
@Override
public void run() {
}
}
复制代码
第二种方式是实现Runnable接口,以下所示:
public class HandlerThread implements Runnable {
@Override
public void run() {
}
}
复制代码
推荐使用第二种方式,由于继承Thread类不符合里氏替换原则,实现Runnable接口可使编程更加灵活,对外暴露的细节比较少。
第三种方式使用Callable接口,以下所示:
public class Demo implements Callable<String> {
public static void main(String[] args) throws ExecutionException, InterruptedException {
Callable<String> callable=new Demo();
FutureTask<String> futureTask=new FutureTask<>(callable);
new Thread(futureTask).start();
System.out.println(futureTask.get());
}
@Override
public String call() throws Exception {
return "demo";
}
}
复制代码
Callable和Future接口的区别在于:
线程的生命周期有五种状态,以下图:
线程的生命周期的状态有:新建状态、就绪状态、运行状态、阻塞状态以及终止状态。