Android文章

并发、并行傻傻分不清楚?线程的一生都经历些什么?

2019-01-29  本文已影响231人  爱读书的顾先生
人生一切难题,知识给你答案

温馨提示:阅读本文需要5-6分钟(少量代码)
来源:《深入理解Java虚拟机》


今天,我们来解决一个问题:

并发、并行傻傻分不清楚?线程的一生都经历些什么?

人生一切难题,知识给你答案。


==并发与并行==

并发是指在某个时间段内,多任务交替处理的能力。并行是指同时处理多任务的能力。

案例:商场销售员需要面对多位顾客时,有的顾客问价格,有的顾客问质量,这时销售员需要不断的回答顾客,中间不停的切换话题并记住之前的话题,方便回过头回答,这种方式可以理解为并发,如果有多位销售员对应多位顾客,多位销售员同时回答顾客问题,这种方式就是并行。

==线程的生命周期==

线程是CPU调度和分配的基本单位。线程可以拥有自己的操作栈、程序计数器、局部变量表等资源,它与同一进程内的其他线程共享该进程的所有资源。

线程的创建有三种方式,第一种是继承自Thread类,如下所示:

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接口的区别在于:

线程的生命周期有五种状态,如下图:

线程五种状态.jpg

线程的生命周期的状态有:新建状态、就绪状态、运行状态、阻塞状态以及终止状态。


838794-506ddad529df4cd4.webp.jpg
上一篇 下一篇

猜你喜欢

热点阅读