草庐IT

异步通信

全部标签

java - 单声道异步异常处理

我只是想弄清楚异常处理在react堆库中是如何工作的。考虑以下示例:publicclassFluxTest{@TestpublicvoidtestIt()throwsInterruptedException{Schedulersingle=Schedulers.single();CountDownLatchlatch=newCountDownLatch(1);Mono.just("hey").subscribeOn(single).doOnError(e->System.out.println("ERROR1:"+e.getMessage())).doOnTerminate((r,e)

TreeView 上 TreeItems 的 JavaFX 优化异步延迟加载

我有一个应用程序,其中有一个TreeView,其中有TreeItems持有大量叶子TreeItem。在TreeView中拥有大量的TreeItem会显着损害应用程序的性能,为了避免这种情况,我将做的是一次只允许展开一个非叶TreeItem,并且一旦TreeItem被折叠,我将清除它的子项,并在需要时异步加载它们(当用户展开TreeItem时)。奇怪的问题是,在下面的这个测试中,当我第一次点击treeitem上的展开箭头时,子项加载正常,如果我折叠它(这将清除子项)并再次展开它,有时它会工作和其他程序开始占用30%的CPU数分钟,然后恢复运行。更奇怪的是,如果我双击TreeItem将其展

java - Java 中的异步函数调用

假设您有三个类A、B、C,每个类都有自己的搜索功能。我想同时使用所有三个搜索功能运行一个键(比如'searchKey')。如果我从三个函数之一得到结果,如何停止其他两个搜索函数?此外,这会比我在每个类中都有一个不同的HashMap并一个接一个地搜索它们的情况运行得更快吗,因为搜索解析为恒定的时间复杂度? 最佳答案 您需要公开一个公共(public)方法来停止搜索,例如取消各自类中线程的标志。关于你的第二点,HashMap中关键搜索的时间复杂度通常是O(1)(最坏情况O(n)如果这些键在同一个哈希桶中)。所以没有太多的优化空间,因为它

Java - 使用 ReentrantLock 异步运行作业?

下面的代码允许我们运行一个作业,同时通过使用ReentrantLock确保一次只能运行一个作业。有没有办法修改此代码以异步运行job.call()并在启动线程之前将MyConcurrentJobException返回给客户端?我们尝试将try/catch/finallyblock包装在一个新的Thread中,但是unlock和lock必须在同一个线程中发生所以我们得到一个IllegalMonitorException??finalstaticLocklock=newReentrantLock();publicObjectrunJob(Stringdesc,Callablejob,boo

Java - 网络 - 最佳实践 - 混契约(Contract)步/异步命令

我正在用Java开发一个小型客户端-服务器程序。客户端和服务器通过一个tcp连接连接。通信的大部分部分是异步的(随时可能发生),但我希望某些部分是同步的(例如发送命令的ACK)。我使用一个从套接字的InputStream读取命令并引发onCommand()事件的线程。命令本身由命令设计模式推进。什么是最佳实践方法(Java),以便在不丢失可能同时出现的其他命令的情况下等待ACK?con.sendPacket(newPacket("ABC"));//waitforABC_ACKedit1把它想象成一个FTP连接,但数据和控制命令都在同一个连接上。我想在后台数据流运行时捕获对控制命令的响应

java - 异步 EJB 3.1 方法和事务

我使用@Asynchronous注释编写了一个小测试来理解EJB3.1中的异步行为。似乎是:如果该方法与调用者存在于同一个bean中,调用不再是异步的。调用者事务被标记为回滚,如果异步方法中的事务被回滚;这可能是1的副作用。但是,如果异步方法存在于另一个bean中,则行为是预期的,即调用是异步的并且调用者事务是独立的(异步方法具有事务的REQUIRES_NEW行为)。这让我感到困惑,因为为什么两种情况下的行为都不一样。有人可以澄清一下吗?附言环境EJB3.1,JBoss6 最佳答案 使用this关键字而不是使用SessionCont

java - Servlet对Requests的异步处理

我在探索NodeJS应用程序和Java应用程序如何处理请求时遇到了Servlet对请求的异步处理。从我在不同地方读到的:请求将由来自Servlet容器的HTTP线程接收和处理,在阻塞操作(如I/O)的情况下,请求可以移交给另一个线程池,接收请求的HTTP线程可以继续返回接收和处理下一个请求。耗时的阻塞操作现在将由Threadpool中的worker承担。如果我的理解是正确的,我有以下问题:Eventhethreadthatprocessestheblockingoperationisgoingtowaitforthatoperationtocompleteandhenceblockin

java - 如何使用 Netty 关闭异步 Http 请求的 AsyncHttpClient?

将AsyncHttpClient与Netty提供程序一起使用将防止主程序在我们执行异步请求时终止。例如,以下程序是否在println之后终止,取决于提供者是JDKAsyncHttpProvider还是NettyAsyncHttpProvider:publicclassProgram{publicstaticCompletableFuturegetDataAsync(Stringuri){finalAsyncHttpClientasyncHttpClient=newAsyncHttpClient();finalCompletableFuturepromise=newCompletable

java - 如何与3D打印机正确通信

我必须编写一个java程序,通过网络接收G代码命令,并通过串行通信将它们发送到3D打印机。原则上一切似乎都没有问题,只要打印机需要超过300ms来执行一条命令。如果执行时间短于此,则打印机接收下一条命令需要花费太多时间,导致命令执行之间存在延迟(打印机喷嘴静止约100-200毫秒)。这可能成为3d打印中的一个问题,所以我必须消除这种延迟。作为比较:RepetierHost或Cura等软件可以通过seial发送相同的命令,而命令执行之间没有任何延迟,因此它必须以某种方式成为可能。我使用jSerialComm串行通信库。这是向打印机发送命令的线程:@Overridepublicvoidru

java - 生产者消费者线程间通信

在线程间通信方面遇到问题,并通过到处使用“虚拟消息”来“解决”它。这是一个坏主意吗?有哪些可能的解决方案?我遇到的示例问题。主线程启动一个线程来处理并将记录插入数据库。主线程读取一个可能很大的文件并将一个记录(对象)一个接一个地放入阻塞队列中。处理线程从队列中读取并工作。如何告诉“处理线程”停止?队列可以是空的,但工作没有完成,主线程现在也没有,当处理线程完成工作并且不能中断它时。所以处理线程做while(queue.size()>0||!Thread.currentThread().isInterrupted()){MyObjectobject=queue.poll(100,Time