Tag: java threads

这个线程程序每次都会显示不同的答案

这是一个Java程序,用于查找1-500000中具有最大除数的数字。 public class Medium2 { static int count1 = 1; static int count2 = 1; static int big_count = 0; static int big = 0; 主要方法 public static void main(String[] args) { Runnable runnable1 = new Runnable() { public void run() { 实施在这里 for (int num = 1; num <= 500000; num++) { for (int […]

在Java中使用线程进行并行编程

随着Join/Fork framework的出现,Java中只能从Java 7进行并行编程。 让我们说在Java中,使用ExecutorService我创建一个4线程的线程池并提交给它说10个任务,这意味着4个线程将开始执行4个任务,其他6个任务将由线程获取,当任何线程完成其任务。 假设我有一个具有4个内核的四核处理器,我知道一个线程可以在一个内核上运行(这里不采用超线程概念)所以我的所有4个线程并行工作,1个内核运行1个线程? 这不是一个并行编程吗? 编辑: 读取源 – 这是Java 8播放列表,在第1章中提到可以从Java 7开始实现并行编程。

每个线程都有堆栈空间吗?

如果我理解正确,那么堆栈是针对本地原始的,并且是对堆中对象的引用。 那么如果你有多个线程会发生什么? 它们是否同时共享相同的堆栈空间(但不同的区域),或者JRE切换上下文并在线程之间切换时加载 – 卸载堆栈内容? 或者JRE是否为每个线程分配单独的堆栈?

Tomcat内存泄漏问题的log4j2线程

我正在使用log4j2进行日志记录,tomcat8和java8版本。 我使用属性“monitorInterval”来定期检查我的log4j2.xml。 在关机期间我的tomcat我面临内存泄漏问题。如何解决这个内存泄漏问题? 以下是catalina日志: 2016年10月6日15:13:55.927警告[localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[mywebapp]似乎已经启动了一个名为[Log4j2-Log4j2Scheduled-1]的线程但是未能阻止它。 这很可能造成内存泄漏。 堆栈跟踪线程:sun.misc.Unsafe.park(本机方法)java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.awaitNanos(AbstractQueuedSynchronizer。 java:2078)java.util.concurrent.ScheduledThreadPoolExecutor $ DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)java.util.concurrent.ScheduledThreadPoolExecutor $ DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)java.util.concurrent.ThreadPoolExecutor.getTask( ThreadPoolExecutor.java:1067)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)java.lang.Thread.run(Thread。 Java的:745) 提前致谢。 更新:我分析了我的日志,实际记录器上下文在Log4jServletContextListener正在销毁时再次启动.. 2016-10-22 13:49:36,347 localhost-startStop-2 DEBUG Log4jServletContextListener确保Log4j正常关闭。 2016-10-22 13:49:36,382 localhost-startStop-2 DEBUG启动LoggerContext [name = bb4719,org.apache.logging.log4j.core.LoggerContext@d77214] … 实际上在我的应用程序中我在web.xml中使用spring ContextLoaderListner,因此它可能在销毁spring listner时在内部使用日志记录。 谢谢

Java线程状态转换,WAITING到BLOCKED还是RUNNABLE?

SO共识与互联网上几乎所有Java线程状态图之间似乎存在差异; 具体来说,关于在调用notify()或notifyAll()之后来自 WAITING线程状态转换… 等待永远不会直接进入RUNNABLE 该线程正在等待直到通知……然后它变为 BLOCKED … 一旦通知此线程,它将无法运行 …这是 …阻塞状态。 因此,对SO的一致意见是:在调用notify()或notifyAll()之后,线程从WAITING转换为BLOCKED ; 下图说明了绿色的这种转变。 题 为什么Web上的大多数状态图说明了从WAITING到RUNNABLE ,而不是BLOCKED的过渡? 红色描绘显示不正确的过渡; 我错过了什么吗?

在java中执行新创建的线程的顺序是什么

class Test { boolean isFirstThread = true; private synchronized void printer(int threadNo) { if(isFirstThread) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } isFirstThread = false; System.out.println(threadNo); } public void starter() { new Thread(){ @Override() public void run() { printer(0); } }.start(); new Thread(){ @Override() public void run() { printer(1); } }.start(); […]

Java:HTTP连接创建的等待连接线程持续很长时间

我有一个服务器端代码,用于检查SOAP服务是否已启动。 代码如下: String response = “”; while (response.length() == 0) { try { final URL url = new URL(“DummySoapServiceURL”); final HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); InputStream inputStream = null; try { httpConnection.setRequestMethod(“GET”); inputStream = httpConnection.getInputStream(); final byte[] buffer = new byte[BUFFER_SIZE]; while (inputStream.read(buffer, 0, BUFFER_SIZE) != -1) { response = new String(buffer); } } finally […]

将@Context UriInfo解析为java线程

我正在尝试将@Context UriInfo解析为另一个线程并执行一些任务。 但是当我尝试运行它时,它会给出错误 Exception in thread “Thread-691” org.jboss.resteasy.spi.LoggableFailure: Unable to find contextual data of type: javax.ws.rs.core.UriInfo 我的代码如下 @GET @Path(“/thread”) public void thread(@Context UriInfo url){ Runnable run = new Runnable() { @Override public void run() { System.out.println(“>>>>>>>>>>>> ” + url.getRequestUri().getQuery()); } }; Thread t = new Thread(run); t.start(); } 如何将UriInfo添加到新线程?

从线程Java / Android返回值

我的android类中有以下线程。 如何从线程中获取错误的值? public int method(){ new Thread(new Runnable() { int err; @Override public void run() { err = device.verify(30, 5, coderChoice, detectModeChoice, 0, listSearch, callbackCmd, MTFPSD.this, matchingScore); updateView(“Finger Captured Successfully”, err); } }).start(); return err; } 我希望该值是方法的返回值,但对于我的生活,我无法获得价值……

ExecutorService的shutdown()不会等到所有线程都完成

我有一个代码,其中4个线程同时运行。 我想等到所有这4个线程都完成。 只有在那之后继续app流程。 我尝试了两种方法: Thread#join() ,这种方法按预期工作。 join()之后的代码仅在所有线程完成后执行。 ExecutorService#shutdown() ,这种技术允许在shutdown()之后执行代码,即使并非所有线程都已完成。 代码示例: ExecutorService service = Executors.newFixedThreadPool(cpuCoresNum); for (int i = 0; i { try { foo(); // some long execution function } catch (Exception e) { e.printStackTrace(); } }); } service.shutdown(); System.out.println(“We’re done! All threads are finished!”); 我的问题: 为什么submit()和shutdown()不要等到所有线程都完成并打印«我们已经完成了! 所有线程都已完成!»在调用service.shutdown();之后立即完成! ?