前言:
多线程在我们的程序开发过程中起着关键的作用,本篇博客咱们从基本的知识开始讲起,来共同分享一下多线程的知识
核心:
什么是线程呢?咱们首先可以从进程来说,进程是指在系统中正在运行的一个应用程序,在计算机中,一个任务就是一个进行,在每一个进程内部至少要有一个线程在运行,一个进程可以有多个线程,比如像生活中的实例,检票是一个进程,那么每个检票的人是线程.下面咱们来说创建线程的方式.
1.创建线程方式的有两种:
方式一:继承thread,重写run方法,
方式二:实现runnable
但是我在书中看到,作者说准确的讲,创建线程只有一种方式那就是构造thread类,而实现线程的执行单元则有两种方式:
第一种:重写thread的run方法,
第二种:实现runnable接口的run方法,并且将runnable实例用作构造thread的参数.
2.线程的生命周期:
new
runnable
running
blocked
terminated
新建—-就绪—运行—-阻塞—死亡,new的状态通过start方法进入runnable状态,runnable状态必须调用start方法,此时才是真正的在jvm进程中创建了一个线程.running状态除了不能到达new状态,其他的状态都可以到达.
3.runnable接口:
只定义了无参无返回值的run方法.
重写thread类的run方法和实现runnable接口的run方法还有一个很重要的不同,那就是thread类的run方法是不能共享的,也就是说A线程不能把B线程的run方法当做自己的执行单元,而使用runnable接口很容易能实现这一点,使用同一个runnable的实例构造不同的thread实例.
4.在这里,我们学到了守护线程
守护线程
守护线程是一类比较特殊的线程,一般用于处理一些后台的工作.
守护线程设置,调用setDaemon方法将thread设置为守护线程,true代表守护线程,false代表正常线程.
守护线程的作用:
守护线程经常用作与执行一些后台任务,因此有时它也被称为后台线程,当你希望关闭某线程的时候,或者退出JVM进程的时候,或者退出JVM进程的时候,一些线程能够自动关闭,此时就可以考虑用守护线程为你完成这样的工作.
5.说到了Thread API,那么咱们来比较一下yield和sleep的区别;
sleep只会导致当前线程暂停指定的时间,没有CPU时间片的消耗
yield只是对CPU调度器的一个提示,如果CPU调度器没有忽略这个提示,他会导致线程上下文的切换.
sleep会使线程短暂block,会在给定的时间内释放CPU资源
yield会使running状态的thread进入runnable状态
sleep几乎百分之百的完成了给定时间的休眠,二yield的提示并不能一定担保
一个线程sleep另一个线程调用interrupt会捕获中断信号,二yield不会.
总结:
本篇博客暂时讲到这里,下一篇博客咱们来说线程安全与线程同步.