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

温馨提示:阅读本文需要3-4分钟(少量代码)


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

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

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

并发与并行

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

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

线程的生命周期

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

  • Callable规定的方法是call(),而Runnable规定的方法是run().

  • Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。

  • call()方法可抛出异常,而run()方法是不能抛出异常的。

  • 运行Callable任务可拿到一个Future对象, Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。

  • Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。

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

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

  • new,新建状态,是线程被创建且未启动的状态。

  • Runnable,就绪状态,是调用start()方法之后运行之前的状态,start()不能被多次调用,否则会抛出IllegalStateException异常。

  • Running,运行状态,是run()正在执行时线程的状态。线程可能会由于某些因素而推出Running,如时间、异常、锁、调度等。

  • Blocked,阻塞状态,进入此状态的情况包括:同步阻塞(锁被其他线程占用)、主动阻塞(调用Thread的某些方法,主动让出CPU执行权,比如sleep()、join()等)以及等待阻塞(执行了wait()方法)。

  • Dead,终止状态,是run()执行结束,或因异常退出后的状态。


 科技快讯 

广州日报讯 (全媒体记者倪明)22日晚,一篇名为《搜索引擎百度已死》的文章刷屏。文章指责用百度搜索引擎,搜索出的结果一半以上会指向百度自家产品,而百家号充斥着大量营销和质量低劣的内容,导致百度搜索的内容质量大幅下滑。

  23日百度发布回应,称目前百度搜索结果中,百家号内容全站占比小于10%。还表示,现在的190万百家号创作者,覆盖了全部的权威媒体和咨询机构,也包含了大量优质的自媒体,他们在源源不断地贡献深度、权威的好内容。

  百度回应后,“搜索引擎百度已死”文章作者方可成认为:全站比例没有太多意义,大家搜索一般只看前两页,如果能给出第一页的结果占比会更有说服力。

  百度周二股价大跌,截至收盘,百度报160.39美元,跌幅达6.40%,市值556.00亿美元。方可成称百度股价下跌与文章无关,是由于中概股普遍下跌,花旗也调低了百度目标价位、对于营销开支增加有担忧所致。


wx号:gulinhai531

顾林海公众号

不定期推出优质文

章,喜欢的朋友们

给我个好看。

©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页