草庐IT

【JavaEE】线程池

全部标签

java - 为什么我尝试生成无穷无尽的线程会在 4 处停止?

我在Java8中有这个简单的代码:classThreadTest{voidthreadTest(){newThread(this::threadTest).start();System.out.println(Thread.activeCount());}publicstaticvoidmain(String[]args){newThreadTest().threadTest();}}我非常期待看到大量的数字被打印出来。我在控制台中看到的是:444444444我说也许我出于某种原因无法看到其他人并修改了代码如下:classThreadTest{voidthreadTest(){newT

java - Eclipse 中的 OSGi 声明式服务、多个服务接口(interface)和线程安全

我刚刚在我的代码中偶然发现了一个现象,归结为:我有一个OSGi声明式服务,提供两个配置如下的服务接口(interface):在我的代码中,我有两个不同的线程,它们都打开一个ServiceTracker来获取服务实例,但是通过不同的接口(interface):tracker=newServiceTracker(getBundle().getBundleContext(),.class,null);tracker.open();tracker.waitForService(1000l);所以一个线程使用IRedactedStore作为服务类,另一个使用IRedactedStoreContr

java - 我应该使用 ruby​​ 线程还是完全不使用 ruby​​ 线程?

我可以选择开发一个严重依赖线程(最多200个)的应用程序。我知道我可以使用其他Ruby解释器进行线程处理,例如JRuby。但是有两件事:1)Jruby还不支持1.9,所以不支持。是否有任何其他至少支持1.9的非绿色线程解释器,因为如果我使用Ruby,这对我来说是先决条件。2)即使使用Jruby之类的解释器,我真的可以获得在Java中可以获得的良好线程性能吗?也许我应该只为这个应用程序使用Java。注意:这不是主观讨论的尝试。它仅用于提供有关线程性能的建议。此外,这不是Java与Ruby或任何类似性质的对比。我是Ruby的新手,希望为了我自己的利益解决这个问题,谢谢。

java - ScheduledExecutorService 多线程并行

我有兴趣使用ScheduledExecutorService在任务尚未完成时为任务生成多个线程。例如,我需要每0.5秒处理一个文件。第一个任务开始处理文件,如果第一个线程未完成,则在0.5秒后生成第二个线程并开始处理第二个文件,依此类推。这可以通过这样的方式完成:ScheduledExecutorServiceexecutor=Executors.newScheduledThreadPool(4)while(!executor.isShutdown()){executor.execute(task);try{Thread.sleep(500);}catch(InterruptedExc

用“流产”状态销毁线程

在Winform计划中使用背景工人。也与某种程度者交流我有一个停止按钮,该按钮试图停止背景工作线程,但有时,背景工作人员线程仍处于状态“中止”我不得不提到我要关心崛起的例外,还使用“最后”块来停止与设备的通信我需要立即停止线程,例如紧急按钮...一些代码:PrivateSubBtnStopTest_Click(senderAsObject,eAsEventArgs)HandlesbtnStopTest.ClickTrystoppedTesting=TrueLog("Stoppingoperationssafely.(Youmighthavetowaitsometime)",Color.Blue

java - 线程池与许多单独的线程

我正处于无法决定采用哪种解决方案的问题之中。这个问题有点独特。让我们这样说吧,我不断地从网络接收数据(每秒2到4次)。现在每个数据都属于不同的组。现在,我们称这些组为group1、group2等等。每个组都有一个专用的作业队列,其中来自网络的数据被过滤并添加到相应的组中进行处理。起初我为每个组创建了一个专用线程,它会从作业队列中获取数据,处理它然后进入阻塞状态(使用链接阻塞队列)。但是我的前辈建议我应该使用线程池,因为这样线程就不会被阻塞,并且可以被其他组用来处理。但事情是这样的,我获取的数据足够快,并且线程处理它所花费的时间足够长,线程可能不会进入阻塞模式。这也将保证数据得到顺序处理

面试官:说说线程池的工作原理?

线程池的底层是基于线程和任务队列来实现的,创建线程池的创建方式通常有以下两种:普通Java项目,使用ThreadPoolExecutor来创建线程池,这点《阿里巴巴Java开发手册》中也有说明,如下图所示:图片Spring项目中,会使用代码可读性更高的ThreadPoolTaskExecutor来创建线程池,虽然它的底层也是通过ThreadPoolExecutor来实现的,但ThreadPoolTaskExecutor可读性更高,因为它不需要在构造方法中设置参数,而是通过属性设置的方式来设置参数的,所以可读性更高。Spring内置的线程池ThreadPoolTaskExecutor的使用示例如

java - 如果线程修改的变量被标记为 volatile,为什么 false 共享是一个问题

我一直在看MartinThompson的文章。这是对错误共享的解释。http://mechanical-sympathy.blogspot.co.uk/2011/07/false-sharing.htmlpublicfinalclassFalseSharingimplementsRunnable{publicfinalstaticintNUM_THREADS=4;//changepublicfinalstaticlongITERATIONS=500L*1000L*1000L;privatefinalintarrayIndex;privatestaticVolatileLong[]lon

java - 多线程同时向非同步的ArrayList对象添加元素可能会导致什么问题?

多线程同时向非同步的ArrayList对象添加元素可能会导致什么问题?尝试用多线程的静态ArrayList运行一些实验,但找不到太多。在这里,我期待在多线程环境中不同步ArrayList或类似对象的很多副作用。任何显示副作用的好例子都是值得赞赏的。谢谢。下面是我的小实验,运行顺利,没有任何异常。我也想知道为什么它没有抛出任何ConcurrentModificationException?importjava.util.ArrayList;importjava.util.List;publicclassExperiment{staticListlist=newArrayList();pu

linux:线程的控制

个人主页:个人主页个人专栏:《数据结构》《C语言》《C++》《Linux》文章目录前言一、线程的总结1.线程的优点2.线程的缺点3.线程异常4.线程和进程二、线程的控制创建线程线程终止线程等待获取返回值线程分离总结前言本文作为我对于线程的简单总结,线程控制的知识总结一、线程的总结1.线程的优点创建一个新线程的代价比创建一个新进程小的多与进程之间的切换相比,线程之间的切换需要操作系统做的工作要小线程占有的资源要比进程少很多能充分利用多处理器的可并行数量(并行,多个执行流在同一时刻拿着不同的CPU继续运算,执行代码)在等待慢速I/O操作结束的同时,程序可执行其他的计算任务计算密集型应用,为了能在多