jjzjj

java.nio 与每个套接字的新线程

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我正在开发一个1对多服务器-客户端应用程序,这是一个小项目。由于套接字IO是阻塞的。我正在为此寻找解决方案。谁能告诉我这两种解决方案的优缺点?使用java.nio为每个连接的客户端新建一个线程。谢谢

java - java中的Executor服务-->如何将单线程代码转换为使用executor

如果这个问题听起来很愚蠢,请原谅我——我才刚刚开始使用Executor。我有一个以这种方式使用线程的现有Java应用程序——基本上使用独立线程——privateThreadspawnThread(){Threadt=newThread(){StringtaskSnap=task.toString();publicvoidrun(){try{println(task.run(null));}catch(InterruptedExceptione){println("ITC-"+taskSnap+"interrupted");}}};returnt;}从上面可以看出,该函数返回一个新线程。

java - 使用 JUnit 测试异步代码

我想测试一些依赖于网络传输的代码。该代码发出请求并提供回调-当请求完成时,将触发回调。我想模拟网络传输,并使用Thread.sleep来模拟一些延迟......当然这会使整个测试暂停。到目前为止,我一直在创建新线程并在整个测试过程中使用CountDownLatches来阻止测试在触发回调之前结束。我的模拟网络对象创建一个新线程,在该线程上hibernate,然后触发回调。这实际上工作得很好,但问题是回调中的任何断言错误都没有报告给原始的junit线程——相反,我在控制台上收到异常文本,在那里它更难理解和使用。我希望有:一种将派生线程的assertEquals输出通过管道传输到主JUni

java - 如何对 ExecutorService 为任务生成新线程进行单元测试?

一个单元如何测试在使用ExecutorService时是否为Runnable任务生成了一个新线程?基本上,我的应用程序有一个静态线程池。publicstaticfinalExecutorServiceexecutorService=Executors.newCachedThreadPool();我想将这个线程池用于我的单元测试,而不是模拟一个或注入(inject)一个新的线程池,因为不同的线程池可以显着改变我的应用程序的行为(固定的、缓存的、计划的),ETC);我想确保我使用其运行时线程池测试应用程序的行为。缓存线程池似乎最适合我。问题在于,由于它是静态的并且线程被缓存60秒,因此只有

java - java中默认的新线程名称是如何给出的?

当我运行这个程序时publicclassFabricextendsThread{publicstaticvoidmain(String[]args){Threadt1=newThread(newFabric());Threadt2=newThread(newFabric());Threadt3=newThread(newFabric());t1.start();t2.start();t3.start();}publicvoidrun(){for(inti=0;i我得到输出Thread-1Thread-5Thread-5Thread-3Thread-1Thread-3线程被赋予奇数名称-

Java - 如何在等待数据的进程上实现线程

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我是多线程编程的新手,我希望能深入了解实现以下想法的最佳方式。现在我的代码是这样工作的它是单线程的,因此在处理每条数据并将其写入数据库所花费的时间里,新数据进来并排队,这会大大降低速度。我在4CPU服务器上运行,但当前设置仅使用1个。我想把中间部分完成的工作分到其余3个CPU上。我将如何最好地做到这一点?我以为我可以为每个新数据创建一个新线程,但我们谈论

java - 线程池执行器 : Tasks are getting queued up and not submitted

我们有一个场景,提交给ThreadPoolExecutor的任务是长时间运行的。当线程池启动时,我们以核心池大小=5、最大池大小=20和队列大小10启动它。在我们的应用程序中,大约有10个任务被提交。大多数情况下,这些任务运行几分钟/小时,然后完成。然而,有一种情况是所有5个任务都在I/O上挂起。结果我的核心池大小达到了最大值,但我的Threadpoolexecutor队列未满。所以额外的5个任务从来没有机会运行。请建议我们如何处理这种情况?在这种情况下,队列越小越好吗?初始化threadPool时最佳队列大小是多少?还有关于挂起的任务,有没有什么办法可以把线程从线程池中拉出来?在那种

java - 为什么 java 安全管理器既不禁止创建 new Thread() 也不禁止启动它?

您知道为什么Java安全管理器不禁止创建或启动新线程的解释吗?newFileWriter在安全管理器下,但newThread()和threadInstance.start()都不是在安全管理器下,可以调用。禁止它不是很有用吗?会不会很难实现?或者创建和启动新线程与禁止它无关紧要? 最佳答案 无法定义安全策略来阻止代码使用标准JavaSecurityManager创建和启动新线程。假设您有以下代码:publicclassTest{publicstaticvoidmain(String[]args){System.out.println

c++ - 为什么boost::when_all会产生一个新线程

下面的代码是用boost1.62编译的。#defineBOOST_THREAD_VERSION4#defineBOOST_THREAD_PROVIDES_EXECUTORS#include#include#include#includeusingnamespacestd::literals::chrono_literals;intmain(){autostart=boost::make_ready_future();boost::loop_executorex;autoa=start.then(ex,[](auto&&){std::cout这会产生4个任务(a、b、c、d),它们之间有

c++ - 多线程中的 OpenCV CascadeClassifier C++ 接口(interface)

我想在多线程中使用CascadeClassifier对象运行OpenCVC++接口(interface)。我的程序的工作方式是我的主线程将“some_file.xml”加载到CascadeClassifier对象中。生成三个或更多线程,并将它们传递给级联对象。程序很快就崩溃了。我已经进行了多次测试并得出结论,在执行“detectmultiscale”函数时,CascadeClassifier对象不是线程安全的。我想避免每次产生新线程时都必须从硬盘读取相同的文件。如何避免这种情况? 最佳答案 如果您正在使用以新格式存储的Haar级联的