Java多线程基础篇(01)

空扰寡人 提交于 2019-11-29 13:02:44

工作忙起来,竟然把博客都忘了,罪过罪过。

1.引言

    几天我一直有在看多线程基础方面的东西。因为多线程是编程中避免不了的东西。因此学习多线程很有必要。这里就先简单介绍一下多线程的基础概念。后续有深入的学习研究。

    多线程是Java中不可避免的一个重要主体。关注我的博友们,将与我一道展开对多线程的学习。然后,接下来的内容,是对JUC(java.util.concurrent)的研究。“基础篇”中只涉及Object的wait()、notify()等接口、Thread类中的接口和多线程锁机制。

2.线程基础

2.1 线程的概述

    线程是一个程序的多个执行路径,执行调度的单位,依托于进程存在。线程不仅可以共享进程的内存,而且还拥有自己的栈空间,栈空间是建立线程时由系统分配的,主要用来保存线程内部所使用的数据。

2.2 为什么使用线程

    在Java程序中使用多线程有许多原因,使用线程的一些原因是他们可以帮助:

    a.使响应更快

    b.利用多个处理器系统

    c.执行异步或后台处理:在不阻塞整个程序的情况下,执行阻塞io。

    d.利用多个线程分解大任务。

2.3 什么情况下使用线程

    使用线程是有代价的,如果程序时计算密集型且每一步都有依赖,那么使用线程反而导致效率下降,因为多个线程之间需要切换,还要负责维护锁,信号量等设施,对并行计算的计算密集型问题和i/o与计算可重叠的问世使用多线程,一般会达到显著的效果。程序中有多个可并发的模块的时候,使用线程也能提高程序的响应速度。

3.多线程的概念

3.1 线程状态图

    

(网上一搜一堆,但是这里有必要给出一下)

3.2 线程状态说明

    线程共包括以下6种状态。

    1.New(新创建):当用new操作符创建一个新线程时,比如new Thread(r),该线程还没有开始运行。这意味着它的状态是new。

    2.Runnable(可运行):一旦调用线程的start()方法,线程处于runnable状态,一个可运行的线程可能处于正在运行也可能没有运行,这取决于操作系统给线程提供运行的时间。

    3.Blocked(被阻塞):当线程处于被阻塞状态时,它暂时不活动,它不运行任何代码且消耗最小的资源。知道线程调度器重新激活它。当一个线程试图获取一个内部的对象锁,而该锁被其他线程所持有,则该线程进入阻塞状态。当所有其他线程释放该锁,并且线程调度器允许本线程持有它时,该线程将变成非阻塞状态。

    4.Waiting(等待):当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。在调用Object.wait方法或Thread.join方法,就会出现这种情况。

    5.Timed waiting(计时等待):有几个方法有一个超时参数。调用它们导致线程进入计时等待状态。这一状态将一直保持到超时期满或者接收到适当的通知。带有超时参数的方法有Thread.sleep和Object.wait、Thread.join、Lock.tryLock以及Condition.await。

    6.Terminated(被终止):线程因两个原因而终止:a.因为run方法正常退出而自然终止。b.因为一个没有捕获的异常终止了run方法而意外死亡。特别地,可以调用线程的stop方法杀死一个线程。该方法抛出ThreadDeath错误对象,由此杀死线程。

    这6种状态涉及到的内容包括Object类,Thread和synchronized关键字,这些内容我们将在后续章节逐个学习。

4.总结

    今天先了解一下Java线程和多线程的基本概念,下面将介绍具体的多线程实现以及用法,这对后续章节的学习很有帮助。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!