`

多线程使用体会

阅读更多

最近做了一个项目使用多线程非常频繁,总结一下使用遇到的问题和解决办法

 

1、当然是线程要用线程池管理,这样会使资源分配合理,比如我在项目中用多线程读取文件,a、有可能使有些文件已经读取快结束了,而有些文件还没开始读取;b、批量处理文件时,如果没有使用线程池,就可能使cpu使用率为100%,机器基本什么都不能干了,而且执行效率并不一定比线程管理下的线程执行效率高。

 

2、多线程使用的资源尽量不使用公共资源,可以用局部变量代替,公共资源很容易引起死锁或者,管理不当使得结果错误,局部变量就不会有这种情况,当内存不够用时,Java内存管理器会把无用的内存释放,所以我们不用担心创建对象过多,当然,如果必须用为公用资源的话,也要公用资源。

 

3、Timer定时管理器和ScheduledFutured线程池的区别

  a、Timer是单线程执行,任务时串行执行,ScheduledFutured是多线程执行任务;

  b、Timer可以通过task.canel()方法取消任务,ScheduledFutured需要通过获取线程执行的结果ScheduledFuture<?>类来取消任务执行;

  c、Timer执行任务超时,下次执行任务会把时间赶回来,就是执行时间不会有偏差,但是ScheduledFutured执行任务如果有上次任务没有执行完,下次就会推迟执行,以至于以后每个周期都会向后推迟。

 

4、多线程中执行关于时间的处理,

  a、如果使用Timer的话,最好在刚执行的时候就记录下时间,如果调用其他函数,则把时间传进去,这样时间比较精确不会有偏差;

  b、如果使用ScheduledFutured执行周期任务的话,最后把周期的时间先生成,任务类依次读取,否则很可能造成时间差;

  c、总之,如果时间最好不要在用的时候才去获取,要先获取时间传给需要使用的方法;

分享到:
评论

相关推荐

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    自.NET 4.0引入`Task`类后,推荐使用异步编程模型(如`async/await`关键字)来替代多线程,因为它可以更好地管理CPU和I/O操作,提供更好的用户体验。 7. **线程通信** `WaitHandle`类(如`AutoResetEvent`, `...

    多线程列子多线程列子多线程列子

    为了保证线程安全,多线程编程中需要使用锁(如互斥锁、读写锁)、信号量、条件变量等同步机制。此外,线程间的通信可以通过共享内存、消息队列、管道等方式实现。 六、死锁与活锁问题 在多线程环境中,可能会出现...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例).rar

    在现代软件开发中,多线程已经成为提升程序性能、改善用户体验的重要手段。这个压缩包包含六个C#.NET多线程的实例,涵盖了多线程的基本使用以及互斥等高级特性。以下是这些实例可能涉及的知识点详解: 1. **线程...

    java多线程经典案例

    通过分析并实践`threadTest`案例,我们可以深入理解Java多线程的原理和使用技巧,为编写高效并发程序打下坚实基础。同时,也要注意多线程编程中的死锁、活锁和饥饿等问题,合理设计线程间的交互,避免出现不可预期的...

    多线程_按键精灵经典多线程操作_

    在IT行业中,多线程是一种常见的编程技术,它允许程序同时执行多个独立的任务,从而提高计算机系统的效率和响应性。特别是在自动化工具如“按键...深入理解和掌握多线程的使用,对于提升自动化水平和工作效率至关重要。

    FFmpegH264 多线程 优化

    FFmpeg是一款开源的多媒体处理工具,它包含了各种编解码...在分析和使用提供的压缩包文件"ffmpegH264Opt"时,开发者可以深入研究源代码,理解并学习如何在FFmpeg中实现多线程和硬件优化,以优化自己的多媒体应用程序。

    多线程使用进度条.zip

    "多线程使用进度条"是一个常见的需求,它允许程序在后台处理任务的同时,通过进度条向用户显示任务的完成进度,提升用户体验。这个压缩包文件"多线程使用进度条.zip"很可能包含了使用VC++(Visual C++)编写的源代码...

    鱼刺多线程注册源码例子(鱼刺多线程稳定框架)

    多线程允许一个应用程序同时执行多个不同的任务,这在处理大量数据、实现并发操作或者优化用户体验时尤其有用。 "鱼刺框架"的稳定特性意味着它在设计时考虑了线程安全性和资源管理,确保在多线程环境下不会出现竞态...

    使用多线程进行文件搜索

    - 特别是对于大型文件系统,多线程搜索能够提高用户体验,因为用户可以在搜索过程中继续执行其他任务。 4. **实现多线程文件搜索** - 每个线程需要一个独立的任务,例如搜索特定路径下的文件。 - 使用`...

    12.1 Qt5多线程:多线程及简单实例

    在编程领域,尤其是在开发高效、响应迅速的应用程序时,多线程技术扮演着至关重要的角色。Qt5框架提供了一种方便的方式来实现多线程,它允许开发者在不同的...正确理解和使用多线程能够提升应用程序的性能和用户体验。

    多线程框架通用多线程源码.zip

    尤其在易语言这样的高级编程环境中,多线程框架的使用能够使开发者更加高效地管理并行任务。本文将基于“多线程框架通用多线程源码.zip”这个压缩包,深入探讨易语言版的多线程通用框架,并分析其核心功能和应用。 ...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。...在实际开发中,正确地应用多线程机制可以显著提升程序的性能和用户体验。

    两种多线程使用方式演示.rar

    本文件"两种多线程使用方式演示.rar"将展示如何在易语言中创建和管理多线程。 首先,我们要了解多线程的两种基本实现方式: 1. **线程对象创建**:这是最常见的方式,程序员通过调用易语言提供的线程创建函数(如...

    Delphi多线程详解_delphi_delphi多线程_多线程_

    除了传统的多线程,Delphi还支持异步编程模型,如使用IO Completion Ports(IOCP)来处理I/O密集型任务,提高系统吞吐量。IOCP允许系统在I/O操作完成时自动通知线程,避免了不必要的等待和上下文切换。 七、实际...

    易语言多线程访问网页

    通过学习以上知识点,并结合提供的“多线程访问网页源码”,开发者可以理解并掌握如何在易语言环境下编写多线程网络应用,提高程序的并发性能,提升用户体验。实践过程中,不断调试和优化代码,将有助于深化对易语言...

    Linux系统下的多线程编程入门.pdf

    多线程编程需考虑性能优化,包括减少上下文切换、合理分配工作负载、使用合适的同步机制等。调试多线程程序通常较复杂,gdb等调试器提供了线程查看和控制功能,帮助开发者定位问题。 总结,Linux系统的多线程编程为...

    C++在多线程中使用mciSendString播放音乐demoB

    本示例"C++在多线程中使用mciSendString播放音乐demoB"着重于如何在多线程环境下利用Windows Multimedia Control Interface (MCI) 函数mciSendString来实现音乐播放。下面我们将深入探讨这两个关键概念。 首先,多...

    稳定、方便、实用的VB6多线程技术(附老马的ActiveX多线程示例)

    通过学习和实践这两个示例,开发者可以深入理解VB6的多线程机制,提高程序的性能和用户体验。不过,由于VB6已不再更新,对于新的开发项目,可能需要转向更现代的语言和框架,如C#、.NET或Java,这些平台提供了更完善...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)201902

    在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代...通过学习和实践这些实例,开发者能够深入理解多线程编程的关键概念和技术,从而在实际项目中更好地应用多线程,提升程序性能和用户体验。

Global site tag (gtag.js) - Google Analytics