线程
前言
大家好! 我是sys。接下来会专门开设线程这一专栏一来是为了督促自己可以及时的学习二来是将自己最近学习的感悟写出来加深自己的印象,如果有理解不正确的地方欢迎指正
一、线程是什么?
线程这个概念是怎么产生?
cpu:中央处理器
程序:一系列的指令 (可以理解我们日常写的代码段,这些代码段可以实现某个效果)
进程:是一个分配单位
线程:是一个调度和分配的基本单位
这四者有什么关系,程序在cpu上运行,但是同时有多个任务运行的时候怎么办,就如同生活中我们去银行办理业务只有一个或者二个窗口的时候我们应该怎么办?排队。所以程序启动的的时候会创建一个进程让他来排队等待cpu分配给他资源。但是如果有一个人办理业务过多的时候那后面的人会排到更久所以为了加快办理速度我们多找几个业务员给这个人办理,这样速度就加快了,业务员就是线程。
当操作系统启动一个java虚拟机(JVM)的时候,其实启动了一个进程,而在进程里面启动了一个以上的线程。
在日常我们编写一个helloWord程序后大家可以用Jconsole看一下,线程的创建以及运行情况
二、线程的组成
每一个线程都有自己的局部变量表、程序计数器以及各自的生命周期三、线程的生命周期
生命周期这个大家都很熟悉但是大家一般都很少关注他们之前的转换
四、线程的创建方式
面试中常问的一个问题,线程的创建方式?大家一般都会说创建Thread,实现Runnable接口。这种方法实际上是不准确的,他的创建方式只有一种那就是构造Thread类。而上面说的那两种是实现线程的执行单元的两种方式。
那这种方式的区别是什么?
他们有一个很重要的不同:Thread类的run方式是不能共享的,而Runnable接口就很容易实现这一点。
通过的他们的创建方式就很容易理解这一点:
这是Runnable接口的他是将这个task传入了Thread中,可以理解我们把一个共有的变量传入了每个方法中,所以A B两个方法可以共享这个变量。
下面这个是Thread的