草庐IT

阻塞性

全部标签

java - 在 Java 中,为什么 readLine() 会阻塞已关闭的套接字连接?

我有一个简单的客户端/服务器应用程序。服务器设置为如果在N秒内没有数据进入,则会发生超时并关闭套接字连接。我通过Socket.setSoTimeout()执行此操作。如果客户端挂起,一切正常。但是,如果客户端死了(例如,我用Ctrl-C杀死它),那么readLine()永远不会超时。这是服务器代码,如果有区别的话:publicvoidrun(){PrintWriterout=null;BufferedReaderin=null;try{sock.setSoTimeout(10000);out=newPrintWriter(sock.getOutputStream(),true);in=

java - Java中是否有任何(无限制的)公平阻塞队列?

如果多个消费者从同一个队列中删除元素,是否有任何阻塞队列的实现可以保证公平的take()操作。我检查了LinkedBlockingQueue、LinkedTransferQueue,看起来它们都是不公平的。ArrayBlockingQueue提供了公平的操作,但它是有界的。 最佳答案 我们可以使用无界队列(如ConcurrentLinked队列)和公平信号量来实现无界公平阻塞队列。下面的类并没有实现BlockingQueue接口(interface)中的所有方法,只是实现了其中的一些用于演示目的。main()方法仅作为测试编写。pu

java - 固定线程池中的线程阻塞

我有两个疑惑:关于Java中的固定线程池。假设我创建了一个有5个线程的固定线程池,并且所有线程当前都在执行,还假设队列中有4个任务在等待完成这些线程的执行。如果所有当前正在执行的任务都被阻塞,会发生什么?是否有办法从该队列中取出任务并将阻塞的任务放入队列中?我们如何知道任务是被阻止还是正在执行? 最佳答案 Ifallcurrentlyexecutingtasksgotblockedwhatwillhappen?Whetherthereisawaytotaketaskfromthatqueueandputtheblockedtaski

java - 为什么 ForkJoinPool::invoke() 会阻塞主线程?

免责声明:这是我第一次使用Java的Fork-Join框架,所以我不能100%确定我是否正确使用了它。Java也不是我的主要编程语言,所以这也可能是相关的。给定以下SSCCE:importjava.util.Arrays;importjava.util.Timer;importjava.util.TimerTask;importjava.util.concurrent.ForkJoinPool;importjava.util.concurrent.ForkJoinTask;importjava.util.concurrent.RecursiveAction;classForkCalcu

java - 在工作线程中阻塞 Java Swing 用户的模式

正如大多数Java程序员所知,对SwingGUI的更新应该只在AWT事件调度线程上完成,建议长时间运行的进程在“工作”线程上执行,更新发送到事件调度线程使用SwingUtilities.invokeAndWait()或SwingUtilities.invokeLater()。当长时间运行的进程完成时,您如何阻止用户继续使用应用程序?您是否将控件灰显,然后让工作线程使用上面提到的SwingUtilities调用重新启用它们?是否有更好的替代模式? 最佳答案 我会考虑3种解决方案:禁用面板的组件:这通常是我所做的。不幸的是,Swing没

java - 创建自定义阻塞 Java Swing 提示

这个问题已经解决了。我正在开发一个基于JavaSwing的项目,应用程序的外观和感觉是完全自定义的。我们试图在整个程序中保持一致的外观,默认的Java对话框窗口并不相同。当前问题需要控制阻止调用用户提示。类似于JOptionPane.showConfirmDialog()在这种情况下,静态调用会生成一个窗口,并暂停程序的流程,直到用户选择一个选项。它还返回选项的值。请注意,GUI本身在逻辑上并未锁定,但用户无法与其其余部分进行交互。intn=JOptionPane.showConfirmDialog(this,"Areyousure?","Confirm"JOptionPane.YES

java - 阻塞、锁定和隔离级别之间的关系是什么?

我了解一些关于Oracle阻塞的知识——更新如何阻塞其他更新直到事务完成,写入者如何不阻塞读取者等。我理解悲观和乐观锁定的概念,以及有关丢失更新等典型银行教科书示例。我也理解JDBC事务隔离级别,例如,我们很高兴看到未提交的数据。不过,我对这些概念之间的关联和相互作用有点模糊。例如:Oracle是否提供悲观或默认乐观锁定(它似乎只是阻止了单独的更新基于两个实验TOADsession。)如果像我怀疑的那样,这些是应用层概念,为什么会我不厌其烦地实现一个当我可以让数据库同步事务无论如何更新?当除我的应用程序之外的其他客户端使用不同的隔离级别访问时,事务隔离级别(我在连接上设置)如何改变数据

java - 如何在不使用选择器的情况下实现阻塞 DatagramChannel 的超时处理

我觉得我在这里遗漏了一些非常明显的东西。我的系统的整体结构使我想使用不带选择器的阻塞DatagramChannel,以保持简单。我试图通过在套接字上设置超时来实现超时处理,但这似乎没有效果。这段伪代码暗示了我正在努力实现的目标。DatagramChannelchannel=DatagramChannel.open();channel.socket().bind(someaddress);channel.socket().setSoTimeout(3000);channel.send(outBuffer,peerAddress);channel.receive(inBuffer);另一方

java - 为什么阻塞而不是循环?

编写以下代码被认为是不好的做法的原因有哪些?while(someList.isEmpty()){try{Thread.currentThread().sleep(100);}catch(Exceptione){}}//Dosomethingtothelistassoonassomethreadaddsanelementtoit.对我来说,选择一个任意值来hibernate不是一个好的做法,在这种情况下我会使用BlockingQueue,但我想知道是否有不止一个原因不应该写这样的代码。 最佳答案 它在对事件采取行动之前平均延迟50毫秒

java - 如何取消阻塞在 ServerSocket.accept() 上阻塞的线程?

我有一个带有这段代码的服务器线程:publicvoidrun(){try{ServerSocketserver;EneaLog.printLog("Serverisrunning.");server=newServerSocket(this.portnumber);while(true){newEneaServerConnection(server.accept(),this.project,stopped).start();if(stopped){EneaLog.printLog("Serversafe-shutdowncompleted.");EneaLog.printLog("H