博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java多线程基础篇(01) - 基本概念
阅读量:6564 次
发布时间:2019-06-24

本文共 1539 字,大约阅读时间需要 5 分钟。

  hot3.png

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

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线程和多线程的基本概念,下面将介绍具体的多线程实现以及用法,这对后续章节的学习很有帮助。

转载于:https://my.oschina.net/mrku/blog/747970

你可能感兴趣的文章
js获取json对象中的key和value,并组成新数组
查看>>
作诗2(玄学)
查看>>
UOJ #449. 【集训队作业2018】喂鸽子
查看>>
biztalk 2010 映射
查看>>
MongoDB数据库
查看>>
时钟设计技巧
查看>>
营业额统计 Treap TYVJ1185
查看>>
html5的float属性超详解(display,position, float)(文本流)
查看>>
js进阶 11-13 jquery如何包裹元素和去除元素外的包裹
查看>>
IMS 相关名词解释
查看>>
Apache 服务器安装和配置相关资料
查看>>
收藏夹
查看>>
蓝桥杯练习 完美的代价(回文)(贪心)
查看>>
SSM-SpringMVC-09:SpringMVC中以继承MutiActionController类的方式实现处理器
查看>>
购物商城--商品详情多级联动
查看>>
CMD和seaJS
查看>>
Windows下Redis数据库管理工具(redis-desktop-manager)安装与配置(图文详解)
查看>>
后台接受数组有问题
查看>>
http 错误代码表
查看>>
暴力/思维 HDOJ 5386 Cover
查看>>