Tag: multithreading

Java线程中的计时器

我有一个负责做一些过程的线程。 我希望这样做,以便这些处理每3秒完成一次。 我已经使用了下面的代码,但是当线程启动时,没有任何反应。 我假设当我为我的计时器定义一个任务时,它会在一个时间间隔内自动执行ScheduledTask ,但它根本不做任何事情。 我错过了什么? class temperatureUp extends Thread { @Override public void run() { TimerTask increaseTemperature = new TimerTask(){ public void run() { try { //do the processing } catch (InterruptedException ex) {} } }; Timer increaserTimer = new Timer(“MyTimer”); increaserTimer.schedule(increaseTemperature, 3000); } };

JUnit终止子线程

当我测试创建子线程的方法的执行时,JUnit测试在子线程之前结束并杀死它。 我如何强制JUnit等待子线程完成其执行? 谢谢

Servlet“已启动一个线程但未能阻止它” – Tomcat中的内存泄漏

Apache Tomcat多次说: Web应用程序[/ MyServlet]似乎已启动名为[pool-61-thread-2]的线程,但未能将其停止。 这很可能造成内存泄漏。 这有危险吗? servlet应该能够处理10.000个请求/天。 完成后如何关闭线程? class Worker { private final CountDownLatch startSignal; private final CountDownLatch doneSignal; private final int threadNumber; Worker( CountDownLatch startSignal, CountDownLatch doneSignal, int threadNumber ){ this.startSignal = startSignal; this.doneSignal = doneSignal; this.threadNumber = threadNumber; } public String[][] getSomeStrArrArr() { String[][] isRs = new String[8][20]; String[][] inRs = new String[8][20]; […]

Java Thread优先级如何转换为OS线程优先级?

由于大多数操作系统没有与此匹配的线程优先级(就数量而言),因此java API线程优先级(1-10)如何转换为操作系统级优先级。 所以请记住,当两个或多个具有不同优先级的线程最终在操作系统级别获得相同的优先级时,会出现这种情况。 如果我的理解有所改正,请澄清一下。

如何实现真正的异步java线程

我有一个需要执行两个操作的函数,一个快速完成,另一个需要很长时间才能运行。 我希望能够将长时间运行的操作委托给一个线程,我不关心线程何时完成,但线程需要完成。 我实现了如下所示,但是,我的第二次操作永远不会完成,因为函数在start()调用之后退出。 我如何确保函数返回但第二个操作线程也完成其执行并且不依赖于父线程? public void someFunction(String data) { smallOperation() SecondOperation a = new SecondOperation(); Thread th = new Thread(a); th.Start(); } class SecondOperation implements Runnable { public void run(){ // doSomething long running } }

从另一个异步方法调用的Spring异步方法

我正在使用Spring 4并且我注意到一个奇怪的行为……如果我从普通实例方法多次调用异步方法,那么它们都会在不同的线程中调用并随机完成。 但是,如果我从另一个异步方法多次调用异步方法,那么它们按顺序完成。 我有这样的事情: @Async public void nonAsyncMethod() { for (int i = 0; i < 30; i++) { asyncMethod(); } } @Async public void asyncMethod() { … something here } 我正在使用默认的异步执行程序。 我应该使用另一个吗? 但是,这个执行程序不会重用任何线程并且每次都启动另一个线程所以它应该没问题……这可能只是一个巧合吗? 但是我尝试了10次以上,如果我恢复到第一种方法的非异步,那么它们会随机完成

如何在multithreading环境中有效地使用RestTemplate?

我正在开发一个项目,我需要对运行Restful Service服务器进行HTTP URL调用,该Restful Service将响应作为JSON字符串返回。 以下是我使用future和callables主要代码 – public class TimeoutThreadExample { private ExecutorService executor = Executors.newFixedThreadPool(10); public String getData() { Future future = executor.submit(new Task()); String response = null; try { response = future.get(100, TimeUnit.MILLISECONDS); } catch (TimeoutException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return response; […]

Java中的Executor和Daemon

我有一个MyThread对象,当我的应用程序通过服务器加载时,我将其实例化,我将其标记为守护程序线程,然后在其上调用start() 。 只要应用程序处于活动状态,该线程就会等待队列中的信息。 我的问题/问题是:目前MyThread正在扩展Thread,因为我将它标记为守护进程,并且我读到了如何实现Runnable以及使用Executor更令人满意。 所以我想问的是,如果MyThread将实现Runnable而不是扩展Thread(当然将被重命名)并且我将使用newSingleThreadScheduledExecutor()如何,什么或者在哪里,我将某些东西标记为守护进程。 我希望我没有弄乱一些条款,请原谅我,如果我有multithreading环境的某些部分对我来说是新的。 谢谢Ittai 更新:我在我的应用程序中引用的模块是一个web-app,它实际上有几个这样的线程,它们的共同之处在于它们作为成员出于各种原因都在ServletContext中。 目前我将Thread扩展为WebThread ,它将ServletContext作为memebr,所有子类都可以使用它。 如果我使用Executor和ThreadFactory切换到Runnable范例,基本上我需要一个丑陋的WebRunnable混合实现Runnable并将ServletContext作为公共成员并让我的ThreadFactory实现newThread(WebRunnable arg0)以及newThread(Runnable arg0) 。 我不确定什么是最好的。 谢谢

notify / notifyall是否释放正在进行的锁定

我有点担心等待并通知/ notifyAll。 我知道每个java对象都有一个锁。 我知道等待将释放其他线程的锁。 通知/ notifyall怎么样? notify / notifyAll会释放它为其他线程持有的锁吗?

设置方法/线程的最大执行时间

我有一个写入数据库的方法。 要求是确保在经过一段时间后该方法不会执行。 如果它在此之前返回,则不应该做任何事情。 我能想到的一个基本方法是做这样的事情。 public class LimitedRuntime { public static void writeToDb(){ // writes to the database } public static void main(String[] args) { long totalExecutionTime = 8000L; long startTime = System.currentTimeMillis(); while(System.currentTimeMillis() – startTime < totalExecutionTime ) { writeToDb(); } } } 这种方法的一个问题是,即使该方法在最大总执行时间之前返回,即使这样,程序也会停止以等待经过的时间。 我怎样才能做得更好(或者更正确)? 如果我们使用Thread ,我们怎样才能找出哪个Thread执行该方法?