JAVA线程误区:Thread不能随便使用

  工作原因,需要找出程序中内存泄漏的地方(泄漏现象:JAVA进程的内存,一直在缓慢的增长,到最后出现OutOfMemory),当然市场上有很多的这样剖析工具了象Jprobe等,但是因为商业原因,没能采用:(.
  于是就用java本身的-Xrunhprof参数+HPjmeter,进行剖析,经过跟踪分析,发现有大量的Thread一直是活动对象,及时run()已经执行过!类似代码如下:
 
  Vector v = new Vector();
  for (int k=0;k<10;k++)
    v.addElement(new Thread());

  ....//other somethings.
  for (int k=0;k<v.size();k++) {
    Thread  t= (Thread)v.elementAt(k);
    t.run();
    v.removeElementAt(k);
   }

   将heap=dump参数打开,用HPjemter分析prof文件日志,发现Thread对象,一直还是活动的,并且监测到memory leak.
   我们再来看看代码,把Thread放到一个类似的队列里边去,然后执行,最后从队列移出,看似没有什么问题,其实这就是Thread滥用的地方.如果开始一个Thread,只是为了运行run方法,而不需要start,那就将Thread换成Runnable对象好了,那么内存泄漏的机会就没有了.
   而且此泄漏跟JDK版本也有关系的,我在JDK5上运行以上代码,就没有监测到泄漏,而在1.4和1.3上,这样的泄漏就一直存在.!
   最后,建议创建线程,最好还是用JDK推荐的Runnable方式.!
CST实战:5分钟搞定圆极化天线轴比分析(含远场设置技巧) 本文提供了一份CST Studio Suite圆极化天线轴比分析的实战指南。文章详细讲解了轴比的概念与工程标准,并重点演示了如何正确设置远场监视器以获取Axial Ratio数据,包括关键步骤与后处理技巧。最后,通过植入式天线在生物组织环境中的案例,分析了复杂环境对轴比性能的影响及优化思路。 阅读详情

相关推荐

机器学习——笔记整理(原理、python代码)——反反复复,出精活!

回顾知识,检查自我,开拓新域。 机器学习1.监督学习 机器学习简介: 机器学习是实现人工智能的手段,其主要研究内容是如何利用数据或经验进行学习,改善具体算法的性能。 多领域交叉,涉及概率论、统计学,算法复杂度理论等多门学科 广泛应用于网络搜索、垃圾邮件过滤、推荐系统、广告投放、信用评价、欺诈检测、股票交易和医疗诊断等应用。 机器学习分类: 机器学习一般分为下面几种类别 监督学习 ( Supervised Learning) 无监督学习 ( Unsupervised Learning) 强化学习(

weixin_45666566的博客 6486

请避免直接使用Thread

XiongWanPing 2018.04.12BaseLooper是一个跨平台的c++通用框架,支持网络非阻塞异步通讯,多线程组件消息处理,支持服务器,设备端和客户端开发,支持Android,ios, linux, OSX和Windows等操作系统,支持嵌入式设备,只要目标系统支持c++11编译器,就可轻松移植 本文档是为了引出BaseLooper框架做下铺垫,先提出问题,后面会给出解决办法。Li...

xwpcom的专栏 264

Day2 十分钟带你解决逆向中对称加密算法 (RC4)

在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种串流加密算法,密钥长度可变。他加密解密使用相同的密钥,因此也被称为“流加密算法”。RC4由伪随机数生成器和异或运算组成。RC4的密钥长度可变,范围是[1,255]。RC4一个字节一个字节地加解密。给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。S盒用来加密数据,而且在加密过程中S盒会变化。由于异或运算的对合性,RC4加密解密使用同一套算法。

m0_73779708的博客 1289

Thread被过度使用

既然Thread质疑声一片,为什么它仍能够存在呢?原因有:(1)某些应用程序天生就具有并发特性,而且需要共享地址空间和各种资源,比如数据库服务器。(2)进程方案开销大。(3)Java语言大行其道,使得绝大部分程序员认为并发编程唯一也是最好的方式就是采用多线程,而且在Java语言中创建一个线程非常简单。对于第二点,只有线程创建,线程同步,线程加锁等开销比进程方案开销小,才会真正获益。只是来个线程创建...

zhangyu8374 177

手把手教你用RC桥式振荡器生成1Hz-1MHz正弦波(附完整电路图)

本文详细介绍了如何从零构建RC桥式振荡器,实现1Hz-1MHz正弦波的生成。通过核心元件选型、参数设计、电路搭建与优化等步骤,帮助读者掌握振荡器的工作原理和实战技巧。特别适合电子实验和信号处理领域的初学者和工程师,附完整电路图和常见问题解决方案。

weixin_30338481的博客 467

SAP 针对不同行业(制造业、零售业、金融业)推出了专属的云解决方案,以下是各行业的核心方案与特点

SAP推出行业专属云解决方案:制造业(SAP Digital Manufacturing Cloud)提供AI排产与质量预警,降低缺陷率;零售业(S/4HANA Cloud零售版)实现AI预测补货与全渠道库存同步,减少浪费;金融业(Business ByDesign)支持合规自动化与实时风控,降低审计成本。各方案均采用云原生架构,典型案例显示实施效果显著。

金牌架构师 491

多线程、并发(很乱)

先复习下 我们先了解一下Thread的几个重要方法。 a、start()方法,调用该方法开始执行该线程; b、stop()方法,调用该方法强制结束该线程执行; c、join方法,调用该方法等待该线程结束,用于主线程等待子线程执行结束。 d、sleep()方法,调用该方法该线程进入等待。 e、run()方法,调用该方法直接执行线程的run()方法,但是线程调用start()方法...

Jesse_cool的博客 1397

YOLOv11改进 - C3k2融合 | C3k2 融合 ARConv 自适应矩形卷积:动态调整卷积核形状与采样点

本文介绍了将自适应矩形卷积(ARConv)模块与YOLOv11相结合的方法。ARConv是针对遥感图像全色锐化任务设计的创新卷积模块,可自适应调整卷积核形状与采样点数量,解决传统卷积刚性限制,实现高效特征提取。其工作流程包括学习卷积核高度和宽度、选择采样点数量、生成采样图、卷积实现与空间自适应增强。我们将集成ARConv的C3k2_ARConv模块引入YOLOv11,对相关代码进行修改和注册,并配置了yolov11 - C3k2_ARConv.yaml文件。实验脚本显示,该结合方式应用于目标检测任务。

魔改工程师的博客 1005

java thread 内存泄露_Java Thread 是怎么造成内存泄露的?

问:简单解释下 Thread 是如何造成内存泄漏的?答:解释这个问题需要举几个例子。public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.l...

weixin_35241415的博客 975

【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)?

如何查看 WPS 的输入静态地理数据(二进制格式)?

WW、forever的博客 633

【YOLOv12多模态融合改进】| TFAM:时序融合注意力模块 | 引入通道 - 空间双分支注意力机制,解决双模态特征融合中时序关联不足的问题

TFAM模块通过时序信息驱动的注意力机制,解决了双时相特征融合中时序关联不足的问题,实现了更精准的变化区域定位和特征表示。其结构轻量、泛化性强,为变化检测任务提供了一种高效的特征融合解决方案。

Limiiiing的博客 866

JAVA 内存泄露详解(原因、例子及解决)

转载请注明出处:http://blog.youkuaiyun.com/anxpp/article/details/51325838,谢谢! Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存。理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同。 JAVA 中的内存管...

anxpp的博客 12万+

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

|~~~热爱生活、努力学习的小伙汁~~~| 2108

【原来是这样】一个Java多线程的问题,颠覆了我多年的认知!

碰见个奇怪的多线程问题 小白们也不用怕,今天的文章你们都能看得懂????,最近的学习中,碰到这样的一个问题: Java创建多线程的方式有哪几种啊? 你可能会说啦,这还不简单,不就是: 继承Thread类 实现Runnable接口 好像也是,如果你让我回答这个问题,我似乎也会这样回答,顶多我会再回答一个callable的方式,但是啊,最近看到这样的一个说法,让我陷入了深深的思考啊???? Java中创...

庆哥Java的优快云技术博客 8304

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

彻底理解Runnable和Thread的区别

  在实际工作中,我们很可能习惯性地选择Runnable或Thread之一直接使用,根本没在意二者的区别,但在面试中很多自以为是的菜货面试官会经常而且非常严肃的问出:请你解释下Runnable或Thread的区别?尤其是新手就容易上当,不知如何回答,就胡乱编一通。鄙人今天告诉你们这二者本身就没有本质区别,就是接口和类的区别。问出这个问题的面试官本身就是个二流子!如果非要说区别,请看如下: Run...

zhaojianting的博客 13万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java多线程编程中容易混淆的Thread.sleep()与Object.wait()深度解析

在Java多线程编程的学习和实践过程中,我发现很多初学者(包括曾经的我)经常混淆和这两个方法的使用场景。本文将通过代码示例、时序图和内存变化图,深入分析这两个方法的区别,并分享我在实际项目中使用它们解决线程同步问题的经验。sleep()是线程控制自身执行时间的工具wait()notify()是线程间通信的机制选择合适的方法取决于具体场景需求在我的电商项目开发中,正确使用这些方法解决了库存同步和订单状态更新等多线程问题。建议读者通过实际编码练习来加深理解,可以尝试实现一个多线程的任务调度器来巩固这些概念。

L2430104436的博客 1974

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

线程最最基础的知识

Java 多线程系列文章第 5 篇。

小烁笔记 1万+

Java多线程,Thread和Runnable究竟该用哪个

很久没写博客了,内心有一丝罪恶感。其中一个原因是最近做的一些东西不适合在博客上公开。        今天抽空来说说Java多线程中的一个小话题,也是新人经常会遇到的。起因是我在给新人找培训资料的时候,在网上看到了很多Thread和Runnable究竟该用哪个的讨论,绝大多数这类文章都是同一个祖师爷的,都用了窗口卖票的例子。以下地址是一篇比较有代表性的(搞笑的是连Runnable都拼错了): h

大米瓶子的博客 7571

Java并发核心误区:父线程的变量,子线程到底能不能共享?

本文聚焦Java多线程中父线程(以main线程为例)变量能否被子线程共享的核心误区,基于栈线程私有、堆线程共享的内存模型,解析局部变量仅通过拷贝被访问、成员/静态变量共享易引发并发问题、不同实例成员变量天然隔离的规则,厘清变量共享本质,并解答lambda访问限制、AtomicInteger使用等常见问题,帮开发者避开并发编程陷阱。

weixin_68315058的博客 426

使用Thead子类创建线程VS使用Thread直接创建线程(Runnable接口)的区别

while(ticket > 0) { System.out.println(Thread.currentThread().getName() + " 卖票:" + ticket--);System.out.println("线程执行:" + Thread.currentThread().getName());System.out.println("线程执行:" + Thread.currentThread().getName());1. 重写/实现 run():任务逻辑,不会主动开启新线程。

2401_88029502的博客 462

一次性讲清:Thread / Runnable / Callable / Worker / 线程池(Java 并发不再混乱)

本文清晰区分了Java并发编程中的核心概念:Thread是真正的执行线程,Runnable/Callable只是任务代码,线程池通过Worker(Thread子类)循环执行任务。重点指出常见误区,如直接调用run()不会创建线程、Callable需通过FutureTask包装才能执行。文章强调线程与任务的本质区别——线程是执行资源,任务是业务逻辑,并解析了线程池的工作机制(Worker线程重复执行多个任务)。最后总结出关键认知:线程需池化管理,任务可无限提交,理解这一边界是掌握系统级并发思维的基础。

Mark Wu 的博客 888

Java多线程1: Thread And Runnable 两种线程的创建方式与启动。

创建线程的两种基本方法 一、通过继承Thread类创建线程 实现 Main方法 MyThread myThread1 = new MyThread(); myThread1.setName("thread - 1"); //start(): 执行线程 //run(): 当前线程调用 MyThread myThread2 = new...

IlickCat的博客 358

Arthas - thread 命令深度解析,排查线程死锁与阻塞

Arthas thread 命令解析:排查线程死锁与阻塞 摘要 本文深入解析Arthas诊断工具的thread命令,重点介绍如何排查Java应用中的线程死锁和阻塞问题。主要内容包括: Arthas基础:介绍Arthas的核心优势(无需重启、交互式命令行、实时监控等) thread命令详解: 基础语法和常用参数 检测线程死锁(使用-b参数) 分析CPU占用过高线程(使用-n参数) 实战演示: 通过Java代码模拟死锁场景 使用thread -b命令快速定位死锁 使用Mermaid图表直观展示死锁依赖关系 高级

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

this_thread::yield()使用误区全解析(90%程序员都理解错了)

解析this_thread::yield()真实效果,澄清常见误解。适用于多线程竞争场景,揭示其让出CPU调度的核心机制与实际应用限制。掌握正确使用方法,避免性能反优化,90%程序员都忽略的关键细节,值得收藏。

LiteProceed的博客 349

Java 线程池配置的常见误区

由于线程的创建和销毁对操作系统来说都是比较重量级的操作,所以线程的池化在各种语言内都有实践,当然在 Java 语言中线程池是也非常重要的一部分,有 Doug Lea 大神对线程池的封装,我们使用的时候是非常方便,但也可能会因为不了解其具体实现,对线程池的配置参数存在误解。我们经常在一些技术书籍或博客上看到,向线程池提交任务时,线程池的执行逻辑如下:1、当一个任务被提交后,线程池首先检查正在运行的线程数是否达到核心线程数,如果未达到则创建一个线程。

2501_92589102的博客 792

Java中的线程中断机制:Thread.interrupt()与线程协作的优雅实现

线程中断不是强制终止线程运行。它更像是一种“请求”,向目标线程发送一个“我希望你停止”的信号。目标线程可以选择忽略这个信号,也可以根据自身状态决定是否响应中断。方法的作用仅仅是设置目标线程的中断状态为true。至于线程如何处理这个状态,完全由线程自身逻辑决定。

weixin_41455464的博客 629
上一篇: firefox处理中文crush的解决
下一篇: Oralce 权限小记
lovec
博客等级 码龄25年 1粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值