草庐IT

Multithreading

全部标签

java - 如何使用HttpClient 进行多线程操作?

我要做一个应用程序,它在某个主机上执行登录POST请求,然后导航一些页面,查找并检索一些数据。因为网站资源受session保护,所以我必须先登录网站才能进行一些操作,例如获取或发布一些数据。我的问题是因为HttpClient不是线程安全的,我如何才能只创建一个HttpClient实例但线程可以安全地对其执行?请记住,底层连接必须先登录才能使用。 最佳答案 这是一个答案:http://pro-programmers.blogspot.com/2009/06/apache-httpclient-multi-threads.html

Java CPU 使用率应该是 100%...但它不是

我在我的Corei7笔记本电脑上运行一个Java程序,它有8个内核(4个物理内核,4个HT)。该程序使用8个并行线程,因此它应该用完所有CPU。使用“-server”参数运行时,它始终处于100%。没有它,它总体上约为50%-60%(始终以100%的峰值和30%的下降变化)。这是我觉得奇怪的地方:当我在调试中运行程序并等待CPU使用率特别低(30%)的片刻,然后暂停执行以查看八个线程在做什么时,没有一个处于阻塞状态.此外,它们之间几乎没有同步。这是我想知道的:阻止客户端CPU达到100%的服务器和客户端VM之间的区别是什么?在没有同步的情况下,是什么阻止线程完全用完核心?(可能与1相关

Java 线程 sleep 和中断异常

为什么sleep线程需要trycatch来捕获中断的异常?为什么sleep甚至会发出中断异常错误?这是我真正想在Java编程中找出的两个问题我一直在通过谷歌搜索,但我仍然没有找到明确的解释来解释为什么会发生这两件事。 最佳答案 InterruptedException当线程被阻塞/等待并且被另一个线程中断时抛出(通过Thread.interrupt)。将其视为立即终止的请求,不会遭受Thread.stop()的缺点。这样,即使您指示一个线程hibernate数年,您也可以中断该线程。Therecommendedpractice当抛出

java - 并行度为 1 的串行和并行执行之间的区别

能否请您引用一下为什么使用JavaStreamAPI的以下2个阶乘实现在执行时间上存在显着差异:串行实现在并行度设置为1的自定义fork连接池中执行并行实现(使用Stream.parallel())我的期望是接近执行时间,但是并行版本的速度提高了2倍。我没有运行任何专门的基准测试,但是即使在冷启动jvm中,执行时间也不应该相差太多。下面我附上两个实现的源代码:ParallelpublicclassFastFactorialSupplierimplementsFactorialSupplier{privatefinalExecutorServiceexecutorService;publ

java - 关闭 ExecutorService

在Tomcat中,我写了一个ServletContextListener,它将在启动期间启动一个ExecutorService,并在卸载时终止它。我正在关注ExecutorService的javadoc中的示例publicvoidcontextDestroyed(ServletContextEventsce){executor.shutdown();try{executor.awaitTermination(50,TimeUnit.SECONDS);}catch(InterruptedExceptionie){Thread.currentThread().interrupt();}}我

java - InheritableThreadLocal 和线程池

我有一个问题,我真的认为没有解决方案,但我还是会在这里尝试。我的应用程序使用一个线程池,这个池中的一些线程有一个可继承的线程局部变量。我已经扩展了ThreadPoolExecutor类,以便在线程完成执行时从本质上清除线程局部变量(在afterExecute回调方法中)。我了解到,当您有一个InheritableThreadLocal变量时,会在线程初始化时调用childValue()方法以从父线程获取ThreadLocal变量的值。但是,在我的例子中,下次使用线程时(使用一次后),InheritableThreadLocal变量的值为null(因为它之前在afterExecute中被

java - 使用 Apache DBCP 的多线程

我的应用程序在多个线程中执行多个查询。现在我正在为每个查询创建新连接,我想使用池来提高效率。ApacheDBCP池能否同时在多个线程中工作,或者它会“阻塞”每个线程的某些同步方法?如果它阻塞了,我可以使用其他东西吗?更新在本文中:link声明:BecauseallOracleJDBCAPImethodsaresynchronized,iftwothreadstrytousetheconnectionobjectsimultaneously,thenonewillbeforcedtowaituntiltheotheronefinishesitsuse.所以我猜DBCP无法处理这个问题?我

java - 将 Tomcat 线程专用于 servlet

有没有办法配置tomcat来为特定的servlet或web服务保留线程?我知道这可能可以在servlet过滤器中以编程方式完成。假设我使用250个服务线程的默认配置,但我希望其中的20个保留给特定的servlet/web服务?也许这显然是不可能的-如果可以,有人可以解释为什么吗?我使用的是tomcat6。 最佳答案 根据servlet规范,这是不可能的。但是,在Tomcat中,您可以定义在不同端口上运行的多个连接器。每个连接器都有一个单独的线程池:您将在Tomcat的/conf目录下的server.xml文件中找到有关如何配置线程池

java - 单元测试在 Debug模式下成功,但在正常运行时失败

为什么我的单元测试在Debug模式下成功,但在正常运行时却失败了?publicclassExecutorServiceTestextendsMockitoTestCase{privateintnumThreads;privateExecutorServicepool;privatevolatilebooleaninterruptedBitSet;@OverridepublicvoidsetUp(){numThreads=5;pool=Executors.newFixedThreadPool(numThreads);}classTaskChecksForInterruptedBitimp

java - Hibernate session 线程安全

我知道session不是线程安全的。我的第一个问题:将一个实体传递给另一个线程是否安全,对其进行一些处理,然后将其传递回原始线程并进行更新。publicclassExample1{MyDaodao;...publicvoiddoWork(){MyEntityentity=dao.getEntity();Runnablejob=newJob(entity);Threadt=newThread(job);t.run();t.join();dao.merge(entity);}}我的第二个问题:在一个线程中新建实体并将其保存在另一个线程中是否安全?publicclassExample2{My