1. 在windows部署个项目, 线程每隔一段时间同步一次数据, 但是运行一段时间就一直停在sleep, 查看状态被阻塞 , 其他的线程也被BLOCKED
while (true) { try { //全量同步: 取完queue配置, 同步结束 //增量同步: 循环配置里的内容 conf = busiBlockingQueue.poll(5000L, TimeUnit.MILLISECONDS); //log.info("conf = {},busiBlockingQueue.size = {}", (conf == null ? "null" : conf.getBusiType()), busiBlockingQueue.size()); if (conf == null && transType == TransConstants.TransType.FULL) { break; } //同步数据并处理数据 try { //是否成功获得同步标识 BusiTransVo busiTransVo = buildTransVo(transType, conf, sessionInfo); //BusinessInfo businessInfo = sessionInfo.getBusinessInfo(); //log.info("[{}]SYNCING[{}][{}]: busiTypeName={}, busiType={}, transTimestamp = '{}',transOffsetId = {},conf.szie = {}", Thread.currentThread().getName(),transType, businessInfo.getBusinessId(), conf.getBusiTypeName(), conf.getBusiType(), busiTransVo.getTransTimestamp(), busiTransVo.getTransOffsetId(), busiBlockingQueue.size()); transDataService.dataHandle(transType, conf, busiTransVo, sessionInfo); } catch (Exception e) { log.error(e.getMessage(), e); } //如果是增量同步会轮询同步配置里的内容 if (transType == TransConstants.TransType.INCR) { busiBlockingQueue.put(conf); Thread.sleep(ConvertUtil.convertObjectToLong(conf.getBusiTransFrequency(),2000L)); } } catch (Exception e) { log.error(conf == null ? "Conf is null" : conf.toString()); log.error(e.getMessage(), e); } }
线程被阻塞, 也未发现死锁
相关推荐
在Windows编程中,多线程处理是一项至关重要的技术,它能显著提升程序的性能和响应速度,尤其是在处理并发任务和优化资源利用时。本章主要介绍了六个关键知识点,旨在帮助学习者深入理解并掌握多线程处理。 1. **...
5. Sleep函数:在多线程编程中,有时需要让线程暂停一段时间,以便模拟实际工作。Sleep函数可以实现这一功能,它接受一个毫秒数作为参数,表示线程暂停的时间。 6. WaitForMultipleObjects函数:此函数用于等待多个...
在探究JVM线程状态以及Thread.sleep的实现原理时,我们首先需要了解Java线程与操作系统线程之间的关系。在Java虚拟机(JVM)中,每个线程通常都是以一对一的关系映射到操作系统线程上的。然而,尽管两者在实现上是...
Windows还引入了线程量子(Quantum)的概念,这是在抢占式调度中线程被允许连续执行的时间段。当线程用完其量子后,如果没有更高优先级的线程需要执行,该线程可能会继续运行,直到完成或者遇到I/O操作。这种机制有...
在Windows中,一个进程可以包含一个或多个线程,这些线程共享进程的内存空间和其他资源。 ##### 2. 创建线程的方法 Windows提供了多种创建线程的方式: - **CreateThread** 函数是最常用的创建线程的方法之一,其...
1. Sleep() 函数可以将线程挂起,参数为毫秒,如果当前线程被挂起后,其他的线程可以被调用。 2. 父线程创建子线程后,父线程与子线程独立运行。 3. 创建线程函数原型:HANDLE CreateThread( ... ); 4. 退出线程:...
我只想要进程的某个线程休眠一段时间的,可是用sleep()是将整个进程都休眠的,这个可能达不到,我们想要的效果了。目前我知道有三种方式: 1、usleep 这个是轻量级的,听说能可一实现线程休眠,我个人并不...
在Windows操作系统中,多线程编程是一种常见的编程模式,它允许多个执行单元(线程)在单个进程中并发运行,从而提高程序的执行效率和响应性。在本篇文章中,我们将深入探讨Windows多线程编程的核心概念、实现方法...
在Windows操作系统中,管理和分析进程中的线程是系统管理员和开发者日常工作中不可或缺的一部分。了解如何查看这些线程有助于排查性能问题、定位程序错误以及优化系统资源的使用。本篇文章将详细探讨如何在Windows...
在Windows操作系统中,线程控制是一项关键的编程技术,它涉及到多任务并行处理和系统资源的高效利用。本文将详细讲解如何在Windows环境下使用线程控制,包括线程的创建、关闭、挂起、恢复以及临界区的使用。我们将以...
5. **线程同步API(如:Sleep, SleepEx, QueueUserAPC等)**:这些API可以用来控制线程的执行顺序,或者让线程暂停一段时间,以避免过度竞争资源。 二、线程互斥 线程互斥是线程同步的一个子集,主要关注的是确保...
这篇文档将详细解释如何在Python中实现一个可配置的多线程异步POST请求功能,包括设置持续运行时间、线程数量以及请求间隔。 首先,我们要了解Python中的`http.client`模块,它是用于HTTP客户端操作的标准库,例如...
创建线程时需要指定线程的入口点(即线程函数),线程函数将在线程被调度执行时开始运行。`CreateThread`函数的参数可以用来设定线程的属性,如安全属性、初始堆栈大小、线程优先级等。 线程的管理包括创建、挂起和...
在Windows平台下查看进程中线程CPU等资源占用情况
在C#编程中,Windows服务是一种在后台运行的应用程序,它们通常用于执行自动化任务或定期执行计划的任务,例如数据备份、日志清理等。而多线程技术则是现代计算机编程中的核心概念,它允许程序同时执行多个独立的...
在计算机科学领域,多线程编程是实现并发执行任务的一种技术,特别是在Windows操作系统中,它是一种常见的编程模型。本文将深入探讨Windows环境下的多线程编程技术,包括其原理、创建与管理线程的方法,以及如何通过...
Windows操作系统中,线程的系统空间堆栈是整个多任务运行环境中不可或缺的组成部分。在深入探讨之前,首先需要明确几个基本概念。 首先,堆栈(Stack)是一种数据结构,它遵循后进先出(LIFO)的原则。在计算机程序...
在Windows XP操作系统中,开发一个程序来创建两个线程,每个线程负责显示不同城市(北京和伦敦)的当前时间,是一项涉及C语言编程和多线程技术的任务。以下是对这个知识点的详细解释: 首先,我们需要理解C语言的...
休眠线程是让线程暂时停止执行,等待一段时间后再继续。C#提供了`Thread.Sleep()`方法来实现这一功能。例如,如果你希望线程暂停5秒,可以写成`Thread.Sleep(5000)`。这会使得线程进入无提示等待状态,直到指定的...
在Windows Forms(Winform)应用程序开发中,遇到界面(UI)卡死问题通常是由于长时间运行的任务阻塞了主线程,导致UI无法响应用户交互。主线程是负责更新和绘制用户界面的,如果在这个线程上执行了耗时操作,就会...