Java上下文中的线程和进程之间有什么区别?用Java如何实现进程间通信和线程间通信?请给我指出一些现实生活中的例子。
根本的区别是线程位于相同的地址空间中,而进程位于不同的地址空间中。这意味着线程间通信是关于传递对对象的引用以及更改共享对象,而进程是关于传递对象的序列化副本。
在实践中,Java线程间通信可以实现为对共享对象进行简单的Java方法调用,并引入适当的同步。或者,您可以使用新的并发类来隐藏一些棘手的(容易出错的)同步问题。
相比之下,Java进程间通信基于将状态,请求等转换为字节序列的最低级别,这些字节序列可以作为消息或作为流发送到另一个Java进程。您可以自己完成这项工作,也可以使用各种复杂程度不同的“中间件”技术来抽象实现细节。可以使用的技术包括Java对象序列化,XML,JSON,RMI,CORBA,SOAP
/“ Web服务”,消息查询等等。
在实践上,线程间通信比进程间通信快许多个数量级,并且使您可以更轻松地完成许多事情。但是缺点是,所有内容都必须存在于同一JVM中,因此存在潜在的可伸缩性问题,安全性问题,健壮性问题等等。
问题内容: 我遇到需要将命令发送到正在运行的Java应用程序的情况,现在我正在使用tcp / ip套接字使用Internet Explorer上下文菜单项将命令发送到应用程序。但是,一旦应用程序启动,病毒扫描程序就会抱怨该应用程序开始监听,尽管我只是在监听本地连接。我认为这可能会使用户感到困惑。我正在寻找其他方式而又不会惹恼影音扫描器吗? 问题答案: 为此,最好不要使用基于文件的FIFO队列。或使
前面一章讲了线程间同步,提到了信号量、互斥量、事件集等概念;本章接着上一章的内容,讲解线程间通信。在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取,根据读取到的全局变量值执行相应的动作,达到通信协作的目的。RT-Thread 中则提供了更多的工具帮助在不同的线程中间传递信息,本章会详细介绍这些工具。学习完本章,大家将学会
进程间通信 IPC全称Interprocess Communication,指进程间协作的各种方法,当然包括共享内存,信号量或Socket等。 管道(Pipe) 管道是进程间通信最简单的方式,任何进程的标准输出都可以作为其他进程的输入。 信号(Signal) 下面马上会介绍。 消息队列(Message) 和传统消息队列类似,但是在内核实现的。 共享内存(Shared Memory) 后面也会有更详
问题内容: Java相互依赖的线程如何通信? 例如,我正在使用需要来自其他线程的数据的线程构建Web搜寻器。 问题答案: 这取决于通信的性质。 它是双工的吗(即A与B对话,B与A对话)? 是数据通信还是 完成 通信? 等等。 线程间通信的最简单,最可取的形式就是等待其他线程的完成。使用以下命令最容易做到: 在第一个任务完成之前,第二个任务将不会执行。 Java 5+具有 许多 并发实用程序来处理这
主要内容:实例如果你知道进程间通信,那么就很容易理解线程间通信。 当您开发两个或多个线程交换一些信息的应用程序时,线程间通信很重要。 有三个简单的方法和一个小技巧,使线程通信成为可能。 所有三种方法都列在下面 - 编号 方法 描述 1 使当前线程等到另一个线程调用方法。 2 唤醒在此对象监视器上等待的单个线程。 3 唤醒所有在同一个对象上调用的线程。 这些方法已被实现为中的最终()方法,因此它们在所有类中都可用
问题 你的程序中有多个线程,你需要在这些线程之间安全地交换信息或数据 解决方案 从一个线程向另一个线程发送数据最安全的方式可能就是使用 queue 库中的队列了。创建一个被多个线程共享的 Queue 对象,这些线程通过使用 put() 和 get() 操作来向队列中添加或者删除元素。 例如: from queue import Queue from threading import Thread