Kafka消息发送线程及网络通信 (kafka消息堆积怎么解决)

教程大全 2025-07-21 01:27:46 浏览

Kafka消息发送线程及网络通信

2021-08-30 13:08:56回顾一下前面提到的发送消息的时序图,上一节说到了Kafka相关的元数据信息以及消息的封装,消息封装完成之后就开始将消息发送出去,这个任务由Sender线程来实现。

回顾一下前面提到的发送消息的时序图,上一节说到了Kafka相关的元数据信息以及消息的封装,消息封装完成之后就开始将消息发送出去,这个任务由Sender线程来实现。

1. Sender线程

找到KafkaProducer这个对象,KafkaProducer的构造函数中有这样几行代码。

构造了RecordAccumulator对象,设置了该对象中每个消息批次的大小、缓冲区大小、压缩格式等等。

紧接着就构建了一个非常重要的组件NetworkClient,用作发送消息的载体。

对于构建的NetworkClient,有几个重要的参数要注意一下:

√ connections.max.idle.ms: 表示一个网络连接最多空闲多久,超过这个空闲时间,就关闭这个网络连接,默认是9分钟。

√ max.in.flight.requests.per.connection:表示每个网络连接可以容忍 producer端发送给broker 消息然后消息没有响应的个数,默认是5个。(ps:producer向broker发送数据的时候,其实是存在多个网络连接)

√ send.buffer.bytes:socket发送数据的缓冲区的大小,默认值是128K。

√ receive.buffer.bytes:socket接受数据的缓冲区的大小,默认值是32K。

构建好消息发送的网络通道直到启动Sender线程,用于发送消息。

看到这里就非常明确了,既然是线程,那么肯定有run()方法,我们重点关注该方法中的实现逻辑,在这里要补充一点值得我们借鉴的线程使用模式,可以看到在创建sender线程后,并没有立即启动sender线程,而且新创建了KafkaThread线程,将sender对象给传进去了,然后再启动KafkaThread线程,相信有不少小伙伴会有疑惑,我们进去KafkaThread这个类看一下其中的内容。

发现KafkaThread线程其实只是启动了一个守护线程,那么这样做的好处是什么呢?答案是可以将业务代码和线程本身解耦,复杂的业务逻辑可以在KafkaThread这样的线程中去实现,这样在代码层面上Sender线程就非常的简洁,可读性也比较高。

先看一下Sender这个对象的构造。

* 主要的功能就是用处理向 Kafka 集群发送生产请求的后台线程,更新元数据信息,以及将消息发送到合适的节点

* The background thread that handles the sending of produce requests to the Kafka cluster. This thread makes metadata

kafka消息堆积怎么解决

* requests to renew its view of the cluster and then sends produce requests to the appropriate nodes.

大概了解完Sender对象的初始化参数之后,开始步入正题,找到Sender对象中的run()方法。

以上的run()方法中,出现了两个while判断,本意都是为了保持线程的不间断运行,将消息发送到broker,两处都调用了另外的一个带时间参数的run(xx)重载方法,第一个run(ts)方法是为了将消息缓存区中的消息发送给broker,第二个run(ts)方法会先判断线程是否强制关闭,如果没有强制关闭,则会将消息缓存区中未发送出去的消息发送完毕,然后才退出线程。

* Run a single iteration of sending

* @param now

* The current POSIX time in milliseconds

* 第五步,有可能我们要发送的partition有很多个,这种情况下,有可能会存在这样的情况

* 部分partition的leader partition分布在同一台 服务器 上面。

* 第六步,处理超时的批次

* 第七步,创建发送消息的请求,以批的形式发送,可以减少网络传输成本,提高吞吐

* 第八步,真正执行网络操作的都是这个NetWordClient这个组件

* 包括:发送请求,接受响应(处理响应)

以上的run(long)方法执行过程总结为下面几个步骤:

1. 获取集群元数据信息

2. 调用RecordAccumulator的ready()方法,判断当前时间戳哪些partition是可以进行发送,以及获取partition 的leader partition的元数据信息,得知哪些节点是可以接收消息的

3. 标记还没有拉到元数据的Topic,如果缓存中存在标识为unknownLeaderTopics的topic信息,则将这些topic添加到metadata中,然后调用metadata的requestUpdate()方法,请求更新元数据

4. 将不需要接收消息的节点从按步骤而返回的结果中删除,只对准备接收消息的节点readyNode进行遍历,检查与要发送的节点的网络是否已经建立好,不符合发送条件的节点都会从readyNode中移除掉

5. 针对以上建立好网络连接的节点集合,调用RecordAccumulator的drain()方法,得到等待发送的消息批次集合

6. 处理超时发送的消息,调用RecordAccumulator的addExpiredBatches()方法,循环遍历RecordBatch,判断其中的消息是否超时,如果超时则从队列中移除,释放资源空间

7. 创建发送消息的请求,调用createProducerRequest方法,将消息批次封装成ClientRequest对象,因为批次通常是多个的,所以返回一个List 集合

8. 调用NetworkClient的send()方法,绑定KafkaChannel的op_write操作

9. 调用NetworkClient的poll()方法拉取元数据信息,建立连接,执行网络请求,接收响应,完成消息发送

以上就是Sender线程对消息以及集群元数据所发生的核心过程。其中就涉及到了另外一个核心组件NetworkClient。

2. NetworkClient

NetworkClient是消息发送的介质,不管是生产者发送消息,还是消费者接收消息,都需要依赖于NetworkClient建立网络连接。同样的,我们先了解NetworkClient的组成部分,主要涉及NIO的一些知识,有兴趣的童鞋可以看看NIO的原理和组成。

可以看到NetworkClient实现了KafkaClient接口,包括了几个核心类Selectable、MetadataUpdater、ClusterConnectionStates、InFlightRequests。

2.1 Selectable

其中Selectable是实现异步非阻塞网络IO的接口,通过类的注释可以知道Selectable可以使用单个线程来管理多个网络连接,包括读、写、连接等操作,这个和NIO是一致的。

我们先看看Selectable的实现类Selector,是org.apache.kafka.common.network包下的,源码内容比较多,挑相对比较重要的看。

发起网络请求的第一步是连接、注册事件、发送、消息处理,涉及几个核心方法

1. 连接connect()方法

2. 注册register()

3. 发送send()

4. 消息处理poll()

5. 处理Selector上面的key

2.2 MetadataUpdater

是NetworkClient用于请求更新集群元数据信息并检索集群节点的接口,是一个非线程安全的内部类,有两个实现类,分别是DefaultMetadataUpdater和ManualMetadataUpdater,NetworkClient用到的是DefaultMetadataUpdater类,是NetworkClient的默认实现类,同时是NetworkClient的内部类,从源码可以看到,如下。

2.3 InFlightRequests

这个类是一个请求队列,用于缓存已经发送出去但是没有收到响应的ClientRequest,提供了许多管理缓存队列的方法,支持通过配置参数控制ClientRequest的数量,通过源码可以看到其底层数据结构Map。

除了包含了很多关于处理队列的方法之外,有一个比较重要的方法着重看一下canSendMore()。

了解完上面几个核心类之后,我们开始剖析NetworkClient的流程和实现。

2.4 NetworkClient

Kafka中所有的消息都都需要借助NetworkClient与上下游建立发送通道,其重要性不言而喻。这里我们只考虑消息成功的流程,异常处理不做解析,相对而言没那么重要,消息发送的流程大致如下:

1. 首先调用ready()方法,判断节点是否具备发送消息的条件

2. 通过isReady()方法判断是否可以往节点发送更多请求,用来检查是否有请求堆积

3. 使用initiateConnect初始化连接

4. 然后调用selector的connect()方法建立连接

5. 获取SocketChannel,与服务端建立连接

6. SocketChannel往Selector注册OP_CONNECT事件

7. 调用send()方式发送请求

8. 调用poll()方法处理请求

下面就根据消息发送流程涉及的核心方法进行剖析,了解每个流程中涉及的主要操作。

1. 检查节点是否满足消息发送条件

2. 初始化连接

3. initiateConnect()方法中调用的connect()方法就是Selectable实现类Selector的connect()方法,包括获取SocketChannel并注册OP_CONNECT、OP_READ、 OP_WRITE事件上面已经分析了,这里不做赘述,完成以上一系列建立网络连接的动作之后将消息请求发送到下游节点,Sender的send()方法会调用NetworkClient的send()方法进行发送,而NetworkClient的send()方法最终调用了Selector的send()方法。

4. 最后调用poll()方法处理请求

有兴趣的童鞋可以继续深究回调函数的逻辑和Selector的操作。

补充说明:

上面有一个点没有涉及到,就是kafka的内存池,可以去看一下BufferPool这个类,这一块知识点应该是要在上一篇文章说的,突然想起来漏掉了,在这里做一下补充,对应就是我们前面说到的RecordAccumulator这个类的数据结构,封装好RecordAccumulator对象是有多个Dqueue组成,每个Dqueue由多个RecordBatch组成,除此之外,RecordAccumulator还包括了BufferPool内存池,这里再稍微回忆一下,RecordAccumulator类初始化了ConcurrentMap。

如图所示,我们重点关于内存的分配allocate()和释放deallocate()这个两个方法,有兴趣的小伙伴可以私底下看一下,这个类的代码总共也就三百多行,内容不是很多,欢迎一起交流学习,这里就不做展开了,免得影响本文的主题。

3. 小结

本文主要是剖析Kafka生产者发送消息的真正执行者Sender线程以及作为消息上下游的传输通道NetworkClient组件,主要涉及到NIO的应用,同时介绍了发送消息主要涉及的核心依赖类。写这篇文章主要是起到一个承上启下的作用,既是对前面分析Kafka生产者发送消息的补充,同时也为接下来剖析消费者消费上游消息作铺垫,写得有点不成体系,写文章的思路主要考虑用总分的思路作为线索去分析,个人觉得篇幅过长不方便阅读,所以会尽量精简,重点分析核心方法和流程,希望对读者有所帮助。


计算机软件及应用

三级考试大纲(网络技术) 基本要求 1、具有计算机软件及应用的基本知识。 2、掌握操作系统的基本知识。 3、掌握计算机网络的基本概念与基本工作原理。 4、掌握Internet的基本应用知识。 5、掌握组网、网络管理与网络安全等计算机网络应用的基本知识。 6、了解网络技术的发展。 7、掌握计算机操作并具有C语言编程(含上相调试)的能力。 考试内容 一、基本知识 1、计算机系统组成。 2、计算机软件的基础知识。 3、多媒体的基本概念。 4、计算机应用领域。 二、操作系统 1、操作系统的基础概念、主要功能和分类。 2、进程、线程、进程间通信的基本概念。 3、存储管理、文件管理、设备管理的主要技术。 4、典型操作系统的使用。 三、计算机网络基本概念 1、计算机网络的定义与分类。 2、数据通信技术基础。 3、网络体系结构与协议的基本概念。 4、广域网、局域网与城域网的分类、特点与典型系列。 5、网络互连技术与互连设备。 四、局域网应用技术 1、局域网分类与基本工作原理。 2、高速局域网。 3、局域网组网方法。 4、网络操作系统。 5、结构化布线技术。 五、Internet基础 1、Internet的基本结构与主要服务。 2、Internet通信协议——ICP/IP。 3、Internet接入方法。 4、超文本、超媒体与Web浏览器。 六、网络安全技术 1、信息安全的基本概念。 2、网络管理的基本概念。 3、网络安全策略。 4、加密与认证技术。 5、防火墙技术的基本概念。 七、网络应用:电子商务 1、电子商务基本概念与系统结构。 2、电子商务应用中的关键技术。 3、浏览器、电子邮件及Web服务器的安全特性。 4、Web站点内容的策划与推广。 5、使用Internet进行网上购物。 八、网络技术发展 1、网络应用技术的发展。 2、宽带网络技术。 3、网络新技术。 九、上机操作 1、掌握计算机基本操作。 2、熟练掌握C语言程序设计基本技术、编程和调试。 3、掌握与考试内容相关的上机应用 考试方式 一、笔试:120分钟 二、上机考试:60分钟 其他 三级考试大纲(PC技术) 基本要求 1、具有计算机及其应用的基础知识。 2、熟悉80X86微处理器的结构、原理及其宏汇编语言程序设计。 3、掌握个人计算机的工作原理及逻辑组成和物理结构。 4、掌握Windows操作系统的主要功能、原理、配置及其维护管理。 5、熟悉个人计算机常用外部设备的性能、原理及结构。 考试内容 一、计算机应用的基础知识 1、计算机技术的发展,计算机信息处理的特点,计算机分类,PC机的组成与性能评测。 2、数值信息在计算机内的表:整数的表示和运算,实数(浮点数)的表示和运算。 3、文字信息与文本在计算机内的表示:西文字符的编码,汉字的输入码、国标码、机内码,汉字的输出,通用编码字符集与Unicode。 4、多媒体技术基础:数字声音的类型,波形声音与合成声音,图像、图形的特点与区别,图像、图形和视频信息在计算机内的表示。 5、计算机网络的基础知识:计算机网络的功能、分类和组成。 数据通信的基本原则,网络体系结构与TCP/IP协议,因特网与IP地址,计算机局域网初步。 二、微处理器与汇编语言程序设计 1、微处理器的一般结构:寄存器组,存储器管理,总线时序,工作模式及典型系统配置。 2、Pentium微处理器的功能与结构:内部结构及工作原理,寄存器组,工作模式及存储器管理,中断管理,总路时序。 3、80X86系列微处理器指令系统:指令格式与编码,寻址方式,指令系统。 4、80X86宏汇编语言的程序设计:顺序、分支及循环程序设计,子程序设计、ROMBIOS中断调用和DOS系统功能调用。 三、PC机组成原理与接口技术 1、PC机的逻辑组成与物理结构:主板与芯片组,超组I/O芯片,主板BIOS等。 2、系统叫线的功能与工作原理,ISA总线和PCI局部总线。 3、主存储器的组成与工作原理:ROM和RAM,内存条与主存储器工作原理,Cache存诸器。 4、输入输出控制:I/O寻址方式与I/O端口地址,程序控制I/O方式,中断控制I/O方式,DMAI/O控制方式。 5、外设接口:串行接口,并行接口,SCSI接口,USB和IEEE-1394。 四、Windows操作系统的功能与原理 1、操作系统的功能,类型和Windows98的体系结构,WindowsAPI与DLL的基本概念。 2、Windows的处理机管理:Windows虚拟机,Windows虚拟机管理程序,Windows的进程调度技术。 3、Windows的存储管理:Windows的内存结构与管理,Windows的虚拟内存。 4、Windows的文件管理:Windows的文件系统结构,磁盘的存储结构,FAT16和FAT32。 5、Windows的设备管理:虚拟设备驱动程序,通过驱动程度与小型驱动程序,即插即用与配置管理,电源管理,打印子系统等。 6、Windows的网络通信功能:Windows的网络组件,程序网络与通信,分布式组件对象模型DCOM,Windows中的Internet组件。 7、Windows的多媒体功能:Windows对多媒体文件与设备的支持,Windows的多媒体组件,Windows的媒体播放器。 8、Windows的配置、管理与维护:安装与启动,注册表,系统配置与管理,系统性能监视和优化,故障诊断。 9、PC机的安全与病毒防范:计算机安全的一般概念,PC机病毒及其防范。 五、PC的常用外围设备 1、输入设备:键盘,鼠标器,笔输入设备,扫描仪,数码相机,声音输入设备及MIDI输入设备。 2、输出设备:CRT显示器,液晶显示器与显示控制卡;针式打印机、激光印字机与喷墨打印机;绘图仪;MIDI音乐合成、3D环绕声生成与音箱;视频输出设备。 3、外存储器;软盘存储器;硬盘存储器的组成、原理与性能指标,活动硬盘,磁盘阵列;磁带存储器;光盘存储器的原理与分类,CD—ROM,CD—R和CD—RW,DVD光盘存储器。 4、PC机连网设备:Modem,ISDN与PC机的接入,ADSL接入,有线电视网与Cable Modem,局域网组网设备(以太网卡与集线器),无线接入技术。 六、上机操作 1、掌握计算机基本操作。 2、熟练掌握80X86宏汇编语言程序设计的基本技术、编程和调试。 3、掌握与考试内容相关的知识的上机应用。 考试方式 一、笔试:120分钟 二、上机考试:60分钟 三级考试大纲(信息管理技术) 基本要求 1、具有计算机软件及应用的基础知识。 2、掌握软件工程方法,具有软件开发的基本能力。 3、掌握数据库基本原则,熟悉数据库设计的基本方法。 4、掌握信息管理的基本原理,熟悉计算机信息系统开发的方法。 5、掌握计算机操作并具有C语言编程(含上机调试)的能力。 考试内容 一、基本知识 1、计算机系统组成和应用领域。 2、计算机软件基础知识。 3、操作系统基本概念和应用。 4、计算机网络及应用基础。 5、信息安全的基本概念。 二、软件工程 1、软件工程基本概念。 2、结构化分析,数据流图、数据字典、软件需求说明。 2、结构化设计,总体设计、详细设计、结构图、模块设计。 4、结构化程序设计。 5、软件测试,测试方法、技术和用例。 6、软件质量控制,软件文档。 7、软件工程技术发展。 三、数据库 1、数据库基本概念。 2、关系数据模型。 3、结构化查询语言SQL。 4、数据库管理系统。 5、数据库设计方法、步骤。 6、数据库开发工具。 7、数据库技术发展。 四、信息管理 1、信息管理基本概念。 2、计算机信息管理的发展过程。 3、管理信息系统的概念、功能和构成。 4、管理信息系统的开发,内容、策略和方法。 5、决策支持系统的概念、功能和构成。 6、办公信息系统的概念、功能、构成和工具。 7、信息管理技术发展。 五、信息系统开发方法 1、结构化分析与设计方法的步骤和内容。 2、企业系统规划方法的基本过程和作用。 3、战略数据规划方法的指导思想和基本内容。 4、原理化方法的策略和应用。 5、方法论的发展。 六、上机操作 1、掌握计算机基本操作。 2、熟练掌握C语言程序设计基本技术、编程和调试。 3、掌握与考试内容相关的知识的上机应用。 考试方法 一、笔试:120分钟 二、上机考试:60分钟 三级考试大纲(网络技术) 基本要求 1、具有计算机软件及应用的基本知识。 2、掌握操作系统的基本知识。 3、掌握计算机网络的基本概念与基本工作原理。 4、掌握Internet的基本应用知识。 5、掌握组网、网络管理与网络安全等计算机网络应用的基本知识。 6、了解网络技术的发展。 7、掌握计算机操作并具有C语言编程(含上相调试)的能力。 考试内容 一、基本知识 1、计算机系统组成。 2、计算机软件的基础知识。 3、多媒体的基本概念。 4、计算机应用领域。 二、操作系统 1、操作系统的基础概念、主要功能和分类。 2、进程、线程、进程间通信的基本概念。 3、存储管理、文件管理、设备管理的主要技术。 4、典型操作系统的使用。 三、计算机网络基本概念 1、计算机网络的定义与分类。 2、数据通信技术基础。 3、网络体系结构与协议的基本概念。 4、广域网、局域网与城域网的分类、特点与典型系列。 5、网络互连技术与互连设备。 四、局域网应用技术 1、局域网分类与基本工作原理。 2、高速局域网。 3、局域网组网方法。 4、网络操作系统。 5、结构化布线技术。 五、Internet基础 1、Internet的基本结构与主要服务。 2、Internet通信协议——ICP/IP。 3、Internet接入方法。 4、超文本、超媒体与Web浏览器。 六、网络安全技术 1、信息安全的基本概念。 2、网络管理的基本概念。 3、网络安全策略。 4、加密与认证技术。 5、防火墙技术的基本概念。 七、网络应用:电子商务 1、电子商务基本概念与系统结构。 2、电子商务应用中的关键技术。 3、浏览器、电子邮件及Web服务器的安全特性。 4、Web站点内容的策划与推广。 5、使用Internet进行网上购物。 八、网络技术发展 1、网络应用技术的发展。 2、宽带网络技术。 3、网络新技术。 九、上机操作 1、掌握计算机基本操作。 2、熟练掌握C语言程序设计基本技术、编程和调试。 3、掌握与考试内容相关的上机应用 考试方式 一、笔试:120分钟 二、上机考试:60分钟 三级考试大纲(数据库技术) 基本要求 1、掌握计算机系统和计算机软件的基本概念、计算机网络的基本知识和应用知识、信息安全的基本概念。 2、掌握数据结构与算法的基本知识并能熟练应用。 3、掌握并能熟练运用操作系统的基本知识。 4、掌握数据库的基本概念,深入理解关系数据模型、关系数据理论和关系数据库系统,掌握关系数据语言。 5、掌握数据库设计方法,具有数据库设计能力。 了解数据库技术发展。 6、掌握计算机操作,并具有用C语言编程,开发数据库应用(含上机调试)的能力。 考试内容 一、基础知识 1、计算机系统的组成和应用领域。 2、计算机软件的基础知识。 3、计算机网络的基础知识和应用知识。 4、信息安全的基本概念。 二、数据结构与算法 1、数据结构、算法的基本概念。 2、线性表的定义、存储和运算。 3、树形结构的定义、存储和运算。 3、排序的基本概念和排序算法。 4、检索的基本概念和检索算法。 三、操作系统 1、操作系统的基本概念、主要功能和分类。 2、进程、线程、进程间通信的基本概念。 3、存储管理、文件管理、设备管理的主要技术。 4、典型操作系统的使用。 四、数据库系统基本原理 1、数据库的基本概念,数据库系统的构成。 2、数据模型概念和主要的数据模型。 3、关系数据模型的基本概念,关系操作和关系代数。 4、结构化查询语言SQL。 5、事务管理、并发控制、故障恢复的基本概念。 五、数据库设计和数据库应用 1、关系数据库的规范化理论。 2、数据库设计的目标、内容和方法。 3、数据库应用开发工具。 4、数据库技术发展。 六、上机操作 1、掌握计算机基本操作。 2、掌握C语言程序设计基本技术、编程和调试。 3、掌握与考试内容相关的知识的上机应用。 考试方法 一、笔试:120分钟

什么是java?

Java语言是一个支持网络计算的面向对象程序设计语言。 Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。 主要特性如下:1、Java语言是简单的。 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。 另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。 特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。 2、Java语言是一个面向对象的。 Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。 Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。 总之,Java语言是一个纯的面向对象程序设计语言。 3、Java语言是分布式的。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。 Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 4、Java语言是健壮的。 Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。 对指针的丢弃是Java的明智选择。 Java的安全检查机制使得Java更具健壮性。 5、Java语言是安全的。 Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。 除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。 6、Java语言是体系结构中立的。 Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。 这种途径适合于异构的网络环境和软件的分发。 7、Java语言是可移植的。 这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。 Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。 8、Java语言是解释型的。 如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。 在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。 9、Java是高性能的。 与那些解释型的高级脚本语言相比,Java的确是高性能的。 事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。 10、Java语言是多线程的。 在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。 通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。 值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。 线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。 11、Java语言是动态的。 Java语言的设计目标之一是适应于动态变化的环境。 Java程序需要的类能动态地被载入到运行环境,也可以通过网络来载入所需要的类。 这也有利于软件的升级。 另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。 Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。 Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。 Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。 特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。 详情请看

VB中如何在退出主程序时同时退出子程序

首先是个逻辑问题,既然A你无法改造,就算有方法你又如何从A结束B呢???看说明我乱了,我直接按标题的理解说吧。 对于程序,在操作系统里面是一样的,无所谓主次,除非你将另一个程序加载为你的子线程。 进程之间的通信有几种,DDE,共享内存,socket(笨办法),其他WindowsAPI主动方法:(在A的源码可以修改的情况下)A的Unload事件(最好是QueryUnload事件),用DDE发消息给B进程,B做出响应,关于DDE参考网络。 共享内存主要使用DLL,需要有C/C++开发知识,这里只是说说,如果你正好是个C/C++程序员,那应该有所启发socket可以直接使用Winsock控件,连接本地IP用网络通信,没有网线都没问题,不过是个笨办法(网卡驱动不正常就不能运作)API方法,A在结束时使用TerminateThread把B干掉,这个方法有点点风险,不过对VB相对安全。 被动办法:(只有B的源码可以修改的情况下)B用记时器,一定时间间隔判断A是否在运行,不在运行则结束自己(效率低下)具体的代码再hi我吧

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐