Java线程的深入探讨_MySQL
作者:asx | 来源:互联网 | 2018-04-20 16:02
一般来说,我们把正在计算机中执行的程序叫做进程(Process),而不将其称为程序(Program)。所谓线程(Thread),是进程中某个单一顺序的控制流。新兴的操作系统,如Mac,WindowsNT,Windows95等,大多采用多线程的概念,把线程视为基本执行单位。线程也是Java中的相当重要的
一般来说,我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其
称为程序(Program)。所谓"线程"(Thread),是"进程"中某个单一顺序的控制流。
新兴的操作系统,如Mac,Windows NT,Windows 95等,大多采用多线程的概念,把线
程视为基本执行单位。线程也是Java中的相当重要的组成部分之一。
甚至最简单的Applet也是由多个线程来完成的。在Java中,任何一个Applet的
paint()和update()方法都是由AWT(Abstract Window Toolkit)绘图与事件处理线
程调用的,而Applet 主要的里程碑方法――init(),start(),stop()和destory()
――是由执行该Applet的应用调用的。
单线程的概念没有什么新的地方,真正有趣的是在一个程序中同时使用多个线
程来完成不同的任务。某些地方用轻量进程(Lightweig ht Process)来代替线程
,线程与真正进程的相似性在于它们都是单一顺序控制流。然而线程被认为轻量是
由于它运行于整个程序的上下文内,能使用整个程序共有的资源和程序环境。
作为单一顺序控制流,在运行的程序内线程必须拥有一些资源作为必要的开销
。例如,必须有执行堆栈和程序计数器。在线程内执行的代码只在它的上下文中起
作用,因此某些地方用"执行上下文"来代替"线程"。
2.线程属性
为了正确有效地使用线程,必须理解线程的各个方面并了解Java 实时系统。
必须知道如何提供线程体、线程的生命周期、实时系统如 何调度线程、线程组、
什么是幽灵线程(Demo nThread)。
(1)线程体
所有的操作都发生在线程体中,在Java中线程体是从Thread类继承的run()方
法,或实现Runnable接口的类中的run()方法。当线程产生并初始化后,实时系统调
用它的run()方法。run()方法内的代码实现所产生线程的行为,它是线程的主要部
分。
(2)线程状态
附图表示了线程在它的生命周期内的任何时刻所能处的状态以及引起状态改
变的方法。这图并不是完整的有限状态图,但基本概括了线程中比较感兴趣和普遍
的方面。以下讨论有关线程生命周期以此为据。
●新线程态(New Thread)
产生一个Thread对象就生成一个新线程。当线程处于"新线程"状态时,仅仅是
一个空线程对象,它还没有分配到系统资源。因此只能启动或终止它。任何其他操
作都会引发异常。
●可运行态(Runnable)
start()方法产生运行线程所必须的资源,调度线程执行,并且调用线程的run
()方法。在这时线程处于可运行态。该状态不称为运行态是因为这时的线程并不
总是一直占用处理机。特别是对于只有一个处理机的PC而言,任何时刻只能有一个
处于可运行态的线程占用处理 机。Java通过调度来实现多线程对处理机的共享。
●非运行态(Not Runnable)
当以下事件发生时,线程进入非运行态。
①suspend()方法被调用;
②sleep()方法被调用;
③线程使用wait()来等待条件变量;
④线程处于I/O等待。
●死亡态(Dead)
当run()方法返回,或别的线程调用stop()方法,线程进入死亡态 。通常Appl
et使用它的stop()方法来终止它产生的所有线程。
(3)线程优先级
虽然我们说线程是并发运行的。然而事实常常并非如此。正如前面谈到的,当
系统中只有一个CPU时,以某种顺序在单CPU情况下执行多线程被称为调度(schedu
ling)。Java采用的是一种简单、固定的调度法,即固定优先级调度。这种算法是
根据处于可运行态线程的相对优先级来实行调度。当线程产生时,它继承原线程的
优先级。在需要时可对优先级进行修改。在任何时刻,如果有多条线程等待运行,
推荐阅读
-
如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ...
[详细]
蜡笔小新 2024-12-22 07:41:31
-
为了使您的电脑更加个性化,许多用户希望为Windows 10桌面设置自己喜欢的多张图片。本文将详细介绍如何轻松实现这一目标,并提供一些专业建议,确保您能够充分利用系统功能。 ...
[详细]
蜡笔小新 2024-12-22 15:39:09
-
-
本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ...
[详细]
蜡笔小新 2024-12-22 09:15:30
-
本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ...
[详细]
蜡笔小新 2024-12-21 23:50:40
-
本文详细介绍了Hive中用于日期和字符串相互转换的多种函数,包括从时间戳到日期格式的转换、日期到时间戳的转换,以及如何处理不同格式的日期字符串。通过这些函数,用户可以轻松实现日期和字符串之间的灵活转换,满足数据处理中的各种需求。 ...
[详细]
蜡笔小新 2024-12-21 20:34:59
-
1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ...
[详细]
蜡笔小新 2024-12-21 20:05:21
-
本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ...
[详细]
蜡笔小新 2024-12-21 19:49:35
-
本文详细介绍了PHP中的多条件分支结构,包括if、elseif和else语句的使用方法。通过具体示例,解释了如何根据不同的条件执行相应的代码块,并确保每个条件只能触发一次。 ...
[详细]
蜡笔小新 2024-12-21 19:44:20
-
本文介绍了如何在 C# 和 XNA 框架中实现一个自定义的 3x3 矩阵类(MMatrix33),旨在深入理解矩阵运算及其应用场景。该类参考了 AS3 Starling 和其他相关资源,以确保算法的准确性和高效性。 ...
[详细]
蜡笔小新 2024-12-21 17:27:57
-
本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ...
[详细]
蜡笔小新 2024-12-21 16:10:08
-
随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ...
[详细]
蜡笔小新 2024-12-21 16:09:25
-
本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ...
[详细]
蜡笔小新 2024-12-21 15:32:13
-
本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ...
[详细]
蜡笔小新 2024-12-21 14:45:11
-
本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ...
[详细]
蜡笔小新 2024-12-21 14:25:43
-
本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ...
[详细]
蜡笔小新 2024-12-21 13:56:06
-