Tag: multithreading

multithreading合并排序算法

我有一个类在genericsList上进行一些递归合并排序,只要该元素实现Comparable。 我正在尝试使代码multithreading以提高性能,为此,我有一个静态变量maxThreads ,它保持我创建的线程数不爆炸,我有一个静态变量currentThreads跟踪我目前运行的线程数。 我的currentThreads变量似乎存在竞争条件,但我无法找到解决方案来修复它。 import java.util.ArrayList; import java.util.List; public class ThreadedMergeSorter<E extends Comparable> implements, Runnable { private List list; private List left, right; private Thread t1, t2; private static final int maxThreads = 4; private static AtomicInteger currentThreads = new AtomicInteger(0); private ThreadedMergeSorter(List list) { this.list = list; } public ThreadedMergeSorter(){} /** * Sorts a […]

Tomcat如何在内部创建线程?

我正在编写一个Tomcat应用程序,它需要在不同的请求中维护一些内部状态,所以我需要在Tomcat创建的不同线程之间共享一些东西。 我的问题是,如果我编写这样的代码,将在Tomcat创建的线程之间共享Map (对于类是static的)。 public class sessionManager extends HttpServlet { private static HashMap Map; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // logic } } 我想我真正没有得到的是Tomcat如何从单个类创建许多线程 。

是弹簧异步传递对象线程安全到以前的更新

我们使用spring异步框架,示例代码如下,如果Entity对象是可变的并且在调用put之前已经更新,JVM会保证put会看到更改吗? @Async(“daoExecutor”) @Repository public class GenericDaoImpl implements GenericDao { public CompletableFuture put(Entity e) { } }

如何自动将数据复制到新的RMI线程?

我正在调整一个小的rmi客户端 – 服务器应用程序。 我写过几件事: HelloInterface -> A Hello World interface for RMI Server -> The server app’ Client -> The client app’ 没什么特别的,但是……我已经把手放在一个新的RMISecurityManager中,它调用一个JNI方法并检查一个单独用户的权限: package rmi; import java.rmi.RMISecurityManager; import java.io.*; public class NativeRMISecurityManager extends RMISecurityManager { private boolean unix; protected static ThreadLocal user = new ThreadLocal(); /* * On interdit l’utilisation du constructeur par defaut * […]

Mac OS上的Java随机减速续表

几个星期前我问了这个问题,但我仍然遇到了问题,我有一些新的提示。 原来的问题在这里: Mac OS上的Java随机减速 基本上,我有一个java应用程序,它将作业拆分为独立的部分,并在不同的线程中运行它们。 线程没有同步或共享内存项。 它们共享的唯一资源是硬盘上的数据文件,每个线程都有一个打开的文件通道。 大部分时间它运行速度非常快,但偶尔会出现非常慢的情况。 如果我将CPU分析器连接到它,它将再次开始快速运行。 如果我拍摄CPU快照,它会说它在“自我时间”中花费大部分时间在一个除了检查一些(非共享的非同步)布尔值之外什么都不做的函数中。 我不知道这是多么准确,因为1,它没有任何意义,2,附加探查器似乎将线程从他们所处的任何模式中解决并修复问题。 此外,无论它是快速运行还是慢速运行,它总是完成并提供相同的输出,并且它永远不会降低总CPU使用率(在这种情况下为~1500%),这意味着线程不会被阻塞。 我尝试过不同的垃圾收集器,不同的内存空间部分,将数据输出写入非raid驱动器,并将所有数据输出放在线程中,将主工作线程分开。 有谁知道这可能是什么样的问题? 它可能是操作系统(OS X 10.6.2)吗? 我无法在Windows机器上复制它,但我没有类似的硬件配置。

mule子线程池大小上限

我正在尝试将线程池大小设置为大于我正在测试我的Mule应用程序的机器的核心数。 最后,我看到Mule将线程数量限制在我的机器核心数量上。 即使我尝试在常规配置元素中设置默认池大小,我仍然会得到相同的限制。 这就是发生的事情(我的机器有4个核心) INFO 2014-11-11 11:12:22,023 [[App-1.0].persistent.receiver.03] org.mule.api.processor.LoggerMessageProcessor: Order 21036 INFO 2014-11-11 11:12:22,025 [[App-1.0].persistent.receiver.01] org.mule.api.processor.LoggerMessageProcessor: Order 21037 INFO 2014-11-11 11:12:22,030 [[App-1.0].persistent.receiver.02] org.mule.api.processor.LoggerMessageProcessor: Order > 6 21038 INFO 2014-11-11 11:12:23,040 [[App-1.0].persistent.receiver.04] org.mule.api.processor.LoggerMessageProcessor: Order 21040 INFO 2014-11-11 11:12:23,040 [[App-1.0].persistent.receiver.03] org.mule.api.processor.LoggerMessageProcessor: Order 21039 INFO 2014-11-11 11:12:23,041 [[App-1.0].persistent.receiver.01] org.mule.api.processor.LoggerMessageProcessor: Order > 6 21041 INFO 2014-11-11 11:12:23,043 [[App-1.0].persistent.receiver.02] org.mule.api.processor.LoggerMessageProcessor: […]

ExecutorService命名约定Java

我最近发现自己使用了一些ExecutorServices(SingleThreadScheduledExecutor和newFixedThreadPool),但我没有任何好名字。 是否有任何关于命名这些对象的指南或约定? 我看过用于SingleThreadScheduledExecutors的名称如“workerThread”,这是正确的,因为它们不完全是线程吗?

如果在UI线程上运行Runnable不是一个选项,如何延迟生成的线程?

我之前的问题有问题,我不确定我的代码是否有内存泄漏。 一些答案涉及它在UI线程上运行,因此阻塞。 确实,它在UI线程上运行,并不会产生新的线程。 因此,为了解决这个问题,我使用Thread而不是Handler在UI之外生成一个新线程。 现在的问题是我无法像在UI线程中运行的那样延迟它。 这是我之前的问题,我的原始UI线程代码是: 这个Runnable是否可以防止内存泄漏? 以下是产生新线程的更新代码: package com.example.helloworld; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.widget.TextView; import android.util.Log; import java.lang.ref.WeakReference; public class HelloWorldActivity extends Activity { private static TextView txtview; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); txtview = (TextView) findViewById(R.id.mainview); Thread t […]

在Spring Boot服务上运行有限数量的线程

我目前正在使用spring boot开发一个Web应用程序,我在服务层中遇到了问题。 我的服务层上有一个沉重的方法。 如果多个用户调用相同的服务,则应用程序会因内存不足而停止。 所以我想限制该方法的并行运行线程的数量。 到目前为止,我已经出现了在该方法上使用synchronized 。 但它会将它限制为单线程方法。 @Service public class DocumentService{ private synchronized void doReplacement(){ //should have limited no of multi threads (eg. 3) } private void normalMethod(){ //no restrictions } } 我该怎么做才能完成这项任务。 任何帮助,将不胜感激。

Thread.yield()有更好的解决方案吗?

我创建了一个扩展ArrayBlockingQueue的CloseableBlockingQueue: private static class CloseableBlockingQueue extends ArrayBlockingQueue { // Flag indicates closed state. private volatile boolean closed = false; public CloseableBlockingQueue(int queueLength) { super(queueLength); } /*** * Shortcut to do nothing if closed. */ @Override public boolean offer(E e) { return closed ? true : super.offer(e); } /*** * Shortcut to do nothing if closed. […]