草庐IT

Tread多线程

全部标签

java - 如何创建守护线程?

Java程序员可以手动创建守护线程吗?怎么样? 最佳答案 java.lang.Thread.setDaemon(boolean)请注意,如果未明确设置,则此属性是从创建新线程的线程“继承”的。 关于java-如何创建守护线程?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1276865/

Java:通过多线程并行化快速排序

我正在试验Java中的并行化算法。我从合并排序开始,并在此question中发布了我的尝试.我修改后的尝试是在下面的代码中,我现在尝试在其中并行化快速排序。我的多线程实现或解决此问题的方法是否有新手错误?如果不是,我难道不应该期望双核上的顺序算法和并行算法之间的速度提高超过32%(请参阅底部的计时)?这里是多线程算法:publicclassThreadedQuickextendsThread{finalintMAX_THREADS=Runtime.getRuntime().availableProcessors();CountDownLatchdoneSignal;staticintn

java - 终止运行 native 代码的线程

在我的应用程序中,我有一些native代码的包装器,它通过JNI桥调用。此native代码需要在单独的线程中执行(并行处理)。然而,问题是代码有时会“挂起”,因此需要“强制”终止线程。不幸的是,我还没有找到任何“微妙”的方法来这样做:一般建议是告诉线程中的代码优雅地退出,但我不能用这个native代码(上面的第3方代码)来做到这一点。我使用JavaConcurrentAPI进行任务提交:FutureprocessFuture=taskExecutor.submit(callable);try{result=processFuture.get(this.executionTimeout,

java - 使用 Spring 的线程安全、无状态设计

我假设如果实例变量由springIOC管理,并且是单例,那么设计可以称为无状态和线程安全的。这种类型的设计因此可以扩展到集群服务器。下面概述的我的假设是否正确?@Repository("myDao")publicclassMyDaoimplementsDao{@AutowiredprivateJdbcTemplatejdbcTemplate;@Value("${sqlFoo}")privateStringfoo;@OverridepublicIntegergetMyInt(Stringstr){returnjdbcTemplate.queryForInt(foo,str);}然后注入(

java - Collections.synchronizedMap(new LinkedHashMap());没有使 Map 线程安全

我正在使用以下构造来创建线程安全的Map。Collections.synchronizedMap(newLinkedHashMap());尽管我遇到了ConcurrentModificationException错误。 最佳答案 如果没有代码,很难猜测真正的问题是什么,但我的猜测是,您没有使用返回的集合来执行操作。根据javadocInordertoguaranteeserialaccess,itiscriticalthatallaccesstothebackingcollectionisaccomplishedthroughthe

java - 为并行处理数据选择最佳线程数

假设我有一项处理100万个句子的任务。对于每个句子,我都需要对其进行处理,而不管它们以何种特定顺序处理。在我的Java程序中,我有一组futures从我的主要工作block中分离出来,带有一个可调用的,它定义了要在一大块句子上完成的工作单元,我正在寻找一种优化数量的方法我分配的线程处理大块的句子,然后重新组合每个线程的所有结果。在我看到yield递减之前,我可以使用的最大线程数是多少才能在速度方面提供最佳性能?另外,是什么导致分配的线程越多(即一次可以完成更多线程)的逻辑不正确? 最佳答案 在实践中,可能很难找到最佳线程数,甚至每次

java - 使用 lambda 保护线程安全

我正在尝试更新一些代码以使用lambda表达式,但我在保持线程安全方面遇到了一些麻烦。我有多个线程正在运行,最终调用以下回调,它有一个synchronized方法,可以将一些结果添加到LinkedList。finalListmappedDocs=newLinkedList();finalMapCallbackmapCallback=newMapCallback(){@Overridepublicsynchronizedvoiddone(intfile,Listresults){mappedDocs.addAll(results);}};但是,当我将它转换为lambda表达式时,我丢失了

java - 监控java线程执行的工具

我有一个在Tomcat服务器(Linux)上运行的JavaWeb应用程序。在生产环境中,我面临一些性能问题。以随机间隔运行tomcat的jsvc进程开始以90-100%的CPU运行。我无法找出此事件的触发因素。服务器是四核系统。内存消耗不代表任何异常。我如何监控应用程序中的哪个线程(应用程序堆栈跟踪)导致了问题?我正在检查jconsole和PSIProbe,但两者都没有给出应用程序内部哪个线程导致CPU使用率异常的任何详细信息。 最佳答案 一个相对简单的方法来做到这一点(这可能适用于您的情况也可能不适用-取决于行为发生的时间):当您

java - 如何暂停/恢复 Java 线程

我正在用Java制作井字棋程序,因为我正在学习Java,并且我认为一个简单的项目将是一个很好的起点。到目前为止,这是我的代码:publicclassStart{publicstaticvoidmain(String[]args){GameTicTacToegameTicTacToe=newGameTicTacToe();gameTicTacToe.windowBirth();}}还有,importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassGameTicTacToeimplementsActionLi

java - 为什么 Thread 类不是最终的?你为什么要扩展一个线程?

我得到这个作为面试问题。whyisn'tThreadclassfinal?WhywouldyouextendaThreadever?我想不出真实世界的用例。 最佳答案 来自Oracle'sdocumentation:Therearetwowaystocreateanewthreadofexecution.OneistodeclareaclasstobeasubclassofThread.ThissubclassshouldoverridetherunmethodofclassThread.Theotherwaytocreateath