本文共 1818 字,大约阅读时间需要 6 分钟。
今天,我们正在解决一个问题:
同时的,同时的愚蠢的困惑?线程在其生命周期中经历了什么?
知识给你解答生活中所有困难的问题。
=concurrent和parallel==
并发是指在一定时间内,多任务交替处理的能力。并行性是指同时处理多个任务的能力。
案例:当一个商场的销售员需要面对许多顾客时,有些顾客要求价格,有些顾客要求质量。这时,业务员需要不断地回答客户,不断地改变话题,记住前面的话题,以便他回答。这种方式可以理解为并发的。如果有许多销售人员对应多个客户,那么许多销售人员可以同时回答客户的问题。这条路是平行的。
=thread lifetime=
线程是CPU调度和分配的基本单元。线程可以有自己的操作堆栈、程序计数器、本地变量表和其他资源。它与同一进程中的其他线程共享进程的所有资源。
创建线程有三种方法。首先从线程类继承,如下所示:
第二种方式是实现Runnable接口,如下所示:
public class HandlerThread implements Runnable { @Override public void run() { }}
建议使用第二种方法,因为继承线程类不符合Richter的替换原则。实现可运行的接口可以使编程更加灵活,公开的细节更少。
public class Demo implements Callable{ public static void main(String[] args) throws ExecutionException, InterruptedException { Callable callable=new Demo(); FutureTask futureTask=new FutureTask<>(callable); new Thread(futureTask).start(); System.out.println(futureTask.get()); } @Override public String call() throws Exception { return "demo"; }}
第三种方法使用可调用接口,如下所示:
可调用接口和未来接口的区别在于:
线程有五个生命周期,如下所示:
线程的生命周期状态为:新状态、就绪状态、运行状态、阻塞状态和终止状态。
我在这里说的是创建线程的形式。创建线程的本质是实际创建一个可运行的对象(您可以看到相关的源代码,线程实现可运行的接口,并且只有目标分配是在内部完成的)。在run方法中,仍然执行目标run方法)。线程的start方法是真正的线程创建方法(在内部调用native create square)。为什么不建议继承线程,因为它向外部世界公开了更多的细节?非常感谢你的想法。
转载地址:http://mzgbi.baihongyu.com/