百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

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

yuyutoo 2024-10-12 01:03 1 浏览 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()...

相关推荐

MySQL5.5+配置主从同步并结合ThinkPHP5设置分布式数据库

前言:本文章是在同处局域网内的两台windows电脑,且MySQL是5.5以上版本下进行的一主多从同步配置,并且使用的是集成环境工具PHPStudy为例。最后就是ThinkPHP5的分布式的连接,读写...

thinkphp5多语言怎么切换(thinkphp5.1视频教程)

thinkphp5多语言进行切换的步骤:第一步,在配置文件中开启多语言配置。第二步,创建多语言目录。相关推荐:《ThinkPHP教程》第三步,编写语言包。视图代码:控制器代码:效果如下:以上就是thi...

基于 ThinkPHP5 + Bootstrap 的后台开发框架 FastAdmin

FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。主要特性基于Auth验证的权限管理系统支持无限级父子级权限继承,父级的管理员可任意增删改子级管理员及权限设置支持单...

Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示

本文实例讲述了Thinkphp5.0框架实现控制器向视图view赋值及视图view取值操作。分享给大家供大家参考,具体如下:Thinkphp5.0控制器向视图view的赋值方式一(使用fetch()方...

thinkphp5实现简单评论回复功能(php评论回复功能源码下载)

由于之前写评论回复都是使用第三方插件:畅言所以也就没什么动手,现在证号在开发一个小的项目,所以就自己动手写评论回复,没写过还真不知道评论回复功能听着简单,但仔细研究起来却无法自拔,由于用户量少,所以...

ThinkPHP框架——实现定时任务,定时更新、清理数据

大家好,我是小蜗牛,今天给大家分享一下,如何用ThinkPHP5.1.*版本实现定时任务,例如凌晨12点更新数据、每隔10秒检测过期会员、每隔几分钟发送请求保证ip的活性等本次分享,主要用到一个名为E...

BeyongCms系统基于ThinkPHP5.1框架的轻量级内容管理系统

BeyongCms内容管理系统(简称BeyongCms)BeyongCms系统基于ThinkPHP5.1框架的轻量级内容管理系统,适用于企业Cms,个人站长等,针对移动App、小程序优化;提供完善简...

YimaoAdminv3企业建站系统,使用 thinkphp5.1.27 + mysql 开发

介绍YimaoAdminv3.0.0企业建站系统,使用thinkphp5.1.27+mysql开发。php要求5.6以上版本,推荐使用5.6,7.0,7.1,扩展(curl,...

ThinkAdmin-V5开发笔记(thinkpad做开发)

前言为了快速开发一款小程序管理后台,在众多的php开源后台中,最终选择了基于thinkphp5的,轻量级的thinkadmin系统,进行二次开发。该系统支持php7。文档地址ThinkAdmin-V5...

thinkphp5.0.9预处理导致的sql注入复现与详细分析

复现先搭建thinkphp5.0.9环境...

thinkphp5出现500错误怎么办(thinkphp页面错误)

thinkphp5出现500错误,如下图所示:相关推荐:《ThinkPHP教程》require():open_basedirrestrictionineffect.File(/home/ww...

Thinkphp5.0极速搭建restful风格接口层

下面是基于ThinkPHPV5.0RC4框架,以restful风格完成的新闻查询(get)、新闻增加(post)、新闻修改(put)、新闻删除(delete)等server接口层。1、下载Thin...

基于ThinkPHP5.1.34 LTS开发的快速开发框架DolphinPHP

DophinPHP(海豚PHP)是一个基于ThinkPHP5.1.34LTS开发的一套开源PHP快速开发框架,DophinPHP秉承极简、极速、极致的开发理念,为开发集成了基于数据-角色的权限管理机...

ThinkPHP5.*远程代码执行高危漏洞手工与升级修复解决方法

漏洞描述由于ThinkPHP5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接GetWebShell。漏洞评级严重影响版本ThinkPHP5.0系列...

Thinkphp5代码执行学习(thinkphp 教程)

Thinkphp5代码执行学习缓存类RCE版本5.0.0<=ThinkPHP5<=5.0.10Tp框架搭建环境搭建测试payload...

取消回复欢迎 发表评论: