编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

java编程教程:多线程&并发编程

gowuye 2024-04-02 10:20 9 浏览 0 评论

java支持单线程以及多线程行动。单线程程序具有一个入口点(main()方法)和一个出口点。多线程程序具有初始入口点(main()方法),然后是许多入口和退出点,它们同时运行main().。“并发性“指同时做多项任务。 java已经内置支持并发编程通过在单个程序中并行运行多个线程。a螺纹,也称为a轻量级过程它是一个单一的编程操作流程,具有一定的起始和结束。在线程的生存期内,只有一个执行点。线程本身不是程序,因为它不能独立运行。相反,它运行在一个程序中。下图显示了一个在单个cpu下运行3个线程的程序:

多任务(或多处理)

现代操作系统(如windows和unix)是多任务系统。多任务系统可以通过共享计算资源,如cpu(S)、主存和i/o通道来并行执行多个任务。在单cpu机器中,只有一个任务可以在一个时间内执行-通过时间切片cpu。在多cpu机器中,可以同时执行几个任务,要么分散在cpu上,要么分时间切片。

在今天的操作系统中,多任务处理是必要的,通过充分利用和优化计算资源的使用来更好地发挥性能。通常有两种多任务操作系统:

  1. 协作多任务系统*每项任务必须自愿对其他任务的输出控制。这就有一个缺点:运行或不合作任务可能会挂起整个系统。

  2. 预攻击多任务系统*任务是给定时间-cpu(S)的切片,并且一旦分配使用时,将被迫对其他任务进行控制。

多线程(在流程中)

在unix中,我们叉子一个新的过程。在windows中,我们启动一个程序。一个过程或程序有自己的地址空间和控制块。它叫做重量级因为它消耗了大量的系统资源。在流程或程序中,我们可以同时运行多个线程来提高性能。

线程不同于重量级进程,是轻量级的,并且运行在一个过程中-它们共享相同的地址空间、分配的资源以及该进程的环境。它是轻量级的,因为它运行在重量级进程的上下文中,并利用为该程序分配的资源和程序环境。线程必须在运行过程中创建自己的资源。例如,线程有自己的堆栈、寄存器和程序计数器。线程内运行的代码仅在该上下文中工作,因此,线程(连续操作流)也称为执行上下文。

通过优化系统资源的使用,程序内多线程提高了程序的性能。例如,当一个线程被阻塞(例如等待完成i/o操作)时,另一个线程可以使用cpu时间来执行计算,从而导致更好的性能和总体吞吐量。

多线程也是必要的,以提供更好的交互性与用户。例如,在一个字处理器中,当一个线程正在打印或保存文件时,另一个线程可以用来继续键入。在gui应用程序中,multithreading对于提供一个响应性用户界面。

对于本文,我假定您理解swing编程,因为swing应用程序依赖于multithreading(执行它们的特定函数、重新绘制和处理事件),最好是演示multithreading。

典型的java程序运行在单个进程中,并且对多个进程不感兴趣。但是,在过程中,它经常使用多线程来并发地运行多个任务。一个独立的java应用程序从一个线程开始(称为主螺纹()与main()方法相关联。这是主螺纹然后可以启动新的用户线程。

臭名昭著的“未响应用户界面”

声名狼藉无响应用户界面(Ui)问题最好用一个计数循环的swing程序来说明。

gui程序有两个按钮。推“start计数”按钮开始计数。推“停止计数”按钮是假想停止(停顿)计数。两个按钮处理程序通过boolean旗帜被称为stop.。停止按钮处理程序设置stop标记;当启动按钮处理程序检查stop在继续下一次计数之前,已经设置了标志。

您应该在eclipse/NetBeans下编写程序,以便我们能够跟踪线程。

但是,一旦启动了启动按钮,ui就会被推到冻住-显示器上没有更新计数器值(即显示不是刷新),并且用户界面没有响应单击停止按钮或任何其他用户交互。

跟踪线程(高级)

从程序跟踪(通过eclipse/NetBeans),我们观察到:

  1. 大main()方法是在“main”线程中启动的。

  2. jre的窗口子系统,通过SwingUtilities.invokeLater()开始3个线程:“awt-windows”(守护线程)、“awt-关闭”和“awt-EventQueue”。“awt-EventQueue-0”称为事件调度线程(EDT),这是唯一一个线程负责处理所有事件(例如单击按钮)并刷新显示以确保gui操作中线程安全并操作gui组件。构造函数UnresponsiveUI()计划在事件调度线程上运行(通过invokeLater())在所有现有事件都已处理之后。“main”线程在main()方法完成。创建了一个名为“DestroyJavaVM”的新线程。

  3. 单击启动按钮时,actionPerformed()运行在上。现在,在已经完全占用了计算密集型计数循环。换句话说,尽管计算正在进行,但在是忙无法处理任何事件(例如单击“停止按钮”或“窗口关闭”按钮)并刷新显示-直到计数完成和美国东部时间才可用。结果显示,显示会冻结直到计数循环完成。

建议在上运行gui构建代码,通过invokeLater().。这是因为许多gui组件都不能保证线程安全。将所有访问gui组件的访问都转移到单个线程中,确保线程安全。假设我们直接在main()方法(在“main”线程下)如下:

追踪表明:

  1. 大main()方法从“main”线程开始。

  2. 当我们进入构造函数时,将启动一个新线程“awt-windows”(守护线程)new UnresponsiveUI()“(因为”)extends JFrame“)

  3. 执行后“setVisible(true)“另外两个线程创建了-”awt-关闭“和”awt-EventQueue“(即,)。

  4. “main”线程在main()方法完成。创建了一个名为“DestroyJavaVM”的新线程。

  5. 此时,有4个线程运行-“awt-windows”、“awt-关闭”和“awt-EventQueue(美国东部时间)”和“DestroyJavaVM”。

  6. 单击启动按钮调用actionPerformed()在美国东部地区。

在前面的示例中,在是通过invokeLater()在后一种情况下,在开始后setVisible()...

相关推荐

PHPMailer远程命令执行漏洞分析

摘要:PHPMailer是一个强大的PHP编写的邮件发送类,但近日被爆出远程命令执行漏洞,该漏洞实际上是什么,有何种影响,本文对该漏洞进行了分析及验证方法,并给出防护方案。0x00漏洞概要PHPMa...

「安全漏洞」DedeCMS-5.8.1 SSTI模板注入导致RCE

漏洞类型SSTIRCE利用条件影响范围应用漏洞概述2021年9月30日,国外安全研究人员StevenSeeley披露了最新的DedeCMS版本中存在的一处SQL注入漏洞以及一处SSTI导致的RCE...

回顾使用PHP原生发送电子邮件(终)文件附件

FileAttachments文件附件Fileattachmentsworkjustlikemixedemail,exceptthatadifferentcontenttyp...

php-fpm.conf & php.ini 安全优化实践

0x01关于php其历史相对已经比较久远了,这里也就不废话了,属弱类型中一种解释型语言除了web开发以及写些简单的exp,暂未发现其它牛逼用途,暂以中小型web站点开发为主另外,低版本的php自身...

linux 安全配置 ossec 开源检测

linux安全配置ossec开源检测一:介绍主要功能有日志分析、完整性检查、rootkit检测、基于时间的警报和主动响应。除了具有入侵检测系统功能外,它还一般被用在SEM/SIM(安全事件管理(...

PHP使用PHPMailer发送验证码邮件的方法与调用逻辑

首先我们需要下载PHPMailer:https://github.com/PHPMailer/PHPMailer一般情况下我们只需要压缩包中的src文件夹中的文件,并保存至根目录即可:设置一个文件,如...

回顾使用PHP原生发送电子邮件(一)

IwishIcouldremembertheveryfirstemailmessageIeversent.Unfortunately,thetruthisthatI...

PHPMAILER实现PHP发邮件功能php实例

这篇文章主要为大家详细介绍了PHPMAILER实现PHP发邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了PHPMAILER实现PHP发邮件功能的具体代码,供大家参考,具...

500道网络安全面试题集锦(附答案)

本篇文章内容为网络安全各个方向涉及的面试题,星数越多代表问题出现的几率越大,但是无论如何都无法覆盖所有的面试问题,更多的还是希望由点达面,查漏补缺,然后祝各位前程似锦,都能找到自己满意的工作!一、We...

网站放家里,随处看电影「Apache+php+ssl 安装和配置」

  使用5G网络,随处都可以看到放自己家里电脑的视频。这个功能很容易实现,不需要太多的专业知识,也不需要额外花钱。如果确实需要,最多花不到两百块钱买一台旧电脑放家里,做个网站,就能解决全部问题,Fre...

Windows2008中 Magic Winmail Server提权

MagicWinmailServer是安全易用全功能的邮件服务器软件,不仅支持SMTP/POP3/IMAP/Webmail/LDAP(公共地址簿)/多域/发信认证/反垃圾邮件/邮件过滤/邮件组...

利用PHPmailer发送邮件

早上帮朋友做一个收集客户联系方式的页面,要求能实时推送信息给管理员。刚开始想到做后台管理,因为时间紧,做后台是赶不上了。想过通过短信发送,成本太高,否决了。。。灵机一动,客户提交时直接把信息发送到邮箱...

phpmailer发送邮件

phpmailer发送邮件PHP内置的mail函数使用起来不够方便,另外受其他语言的影响,博主更偏好面向对象的包管理模式,因此phpmailer成为了我用PHP发送邮件的首选,这里分享给大家。库导入这...

PHP初级教程:读取输入

PHP读取输入:Form:?formaction="welcome.php"method="post">Name:(inputtype="text...

php filter 验证Email,Url,Ip格式

今天发现一个非常好用的函数东西,filter过滤器,用于验证和过滤来自非安全来源的数据,比如用户的输入。验证Email:$email='1234567@qq.com';if(!filter_v...

取消回复欢迎 发表评论: