`
dengminhui
  • 浏览: 168022 次
  • 来自: ...
社区版块
存档分类
最新评论

多线程书写及code review规范

阅读更多


1.   不允许将Calendar用于类的静态成员
      Calendar是天生的多线程不安全的类,将其用于类的静态成员可能导致错误的在多线程中访问。
2.   DateFormat以及SimpleDateFormat非线程安全,不允许将DateFormat用于类的静态成员。
3.   延迟初始化的类成员应声明为volatile
      延迟初始化的类静态成员,如果没有用synchronized的加以保护,则必须以volatile修饰,为了避免对象的状态发布不完整的问题。建议使用Initialization on demand holder idiom
4.   不允许在持有锁的时候调用Thread.sleep()
      在持有锁的时候调用Thread.sleep()很可能导致等待该锁的其它线程被长时间的挂起,从而严重影响程序性能和延展性。
5.   不允许在Boolean对象上使用synchronized关键字
      由于Boolean对象通常仅以两个全局的常型实例出现,在其上使用synchronized关键字可能导致与其它共用该常型实例的完全不相关的代码形成互斥关系,这往往并不是程序设计者的初衷。
6.   wait应置于条件循环中是使用,wait前检查所等待的条件已经满足,并避免意外唤醒的影响
      在wait前判断等待的条件是否已满足可以避免在wait之前的notify通知被忽略。(尽管条件判断与wait两步也并不能看作原子操作)

7.   使状态变量为不可变的,尽量使用不可变的对象或者成员变量,合适的情况下,才使用可变的对象和成员变量
8.   在任何访问状态变量的时候注意视情况使用同步
9.  每个共享的可变变量都需要由唯一一个确定的锁保护。
     维护者应该清楚这个锁(对于每个可被多个线程访问的可变状态变量,如果所有访问它的线程在执行时都占有同一个锁,这种情况下,我们称这个变量是由这个锁保护的)
10.  为了避免同步的不一致性,类似"get"的读操作可能也需要同步。
11.  尽量使用现成的解决方案来处理多线程问题例如,util.concurrent
12.  缩小锁的作用范围,缩短锁的存在时间

分享到:
评论

相关推荐

    win32多线程程序 EXITCODE

    父进程可以使用`WaitForSingleObject`或`WaitForMultipleObjects`函数来等待一个或多个线程的结束,并通过`GetExitCodeThread`获取线程的`EXITCODE`。这样,父进程可以根据`EXITCODE`的值来判断子线程的执行情况,...

    C#多线程编程实战Code源代码

    本资源“C#多线程编程实战Code源代码”来源于华章出版社,提供了丰富的实例来帮助开发者深入理解和应用多线程。 一、C#中的线程 C#语言提供了对线程的内置支持,通过System.Threading命名空间,我们可以创建和管理...

    多线程实现文件下载,代码规范明了

    本篇文章将深入探讨如何使用多线程实现文件下载,以及涉及到的相关编程规范。 首先,我们需要理解多线程的基本概念。在Java或C#等支持多线程的编程语言中,线程是程序执行的最小单元,每个线程都有自己的栈空间,...

    linux_code.rar_linux 多线程_linux 线程_多线程编程

    "linux_code.rar"这个压缩包包含了一些关于Linux多线程编程的源码示例,这对于初学者来说是一份宝贵的教育资源。 1. **线程概念**: 线程是操作系统分配处理器时间的基本单元,它是程序中的执行流。与进程相比,...

    多线程锁的使用规范

    多线程锁使用规范: 【规则1】定义的锁及保护的对象要放在一起声明,同时注明该锁要保护的对象。例如在类的声明中,声明一个m_objA成员变量,和保护此变量的锁m_mutexObjA.....

    Qt 多线程及简单实例 demo

    Qt 多线程及简单实例 demo。 多线程的几大特点: 1.多线程的执行顺序无法保证,与操作系统的调度策略和线程优先级等因素有关。 2.多线程的切换可能发生在任何时刻、任何地点。 3.多线程对代码的敏感度高,因此对...

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

    在编程领域,尤其是在开发高效、响应迅速的应用程序时,多线程技术扮演着至关重要的角色。Qt5框架提供了一种方便的方式来实现多线程,它允许开发者在不同的线程中执行任务,从而避免主线程(GUI线程)因处理耗时操作...

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

    在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效能编程。本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。...

    Linux下C语言多线程编程实例

    在 Linux 下,多线程编程使用的是 POSIX 规范,提供了很多有用的函数和变量来控制线程的创建、执行和同步。 pthread 库是 Linux 下多线程编程的核心库,提供了丰富的函数和变量来控制线程的创建、执行和同步。 在本...

    C#多线程互斥实例 多线程获取同一变量

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...

    多线程并行执行,汇总结果

    在IT行业中,多线程并行执行是一种常见的优化策略,特别是在处理大数据量或者需要高性能计算的任务时。"CountDownLatch" 和 "Thread" 是Java编程语言中实现多线程并行执行的关键工具,它们有助于提高程序的运行效率...

    .NET多线程实例

    .NET框架的多线程技术是开发高性能应用程序的关键组成部分,特别是在处理并发操作、并行计算以及UI更新时。在.NET 2.0版本中,多线程功能已经得到了充分的优化和增强,允许开发者构建出更加高效的应用程序。下面将...

    C# 多线程实例多线程实例多线程实例

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的语言中,它提供了丰富的多线程支持。本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多...

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

    多线程技术是现代软件开发中的重要概念,它允许程序同时执行多个任务,从而提高效率和响应性。VB6虽然相对老旧,但其支持的多线程功能依然具有实用性,尤其是在处理耗时操作或需要并发执行任务的应用场景。 VB6中的...

    Qt中利用OpenCV2.4.4多线程打开多摄像机

    Qt中利用OpenCV2.4.4多线程打开多摄像机 每个线程处理一个摄像机,从中拿出帧显示到主线程的Label控件上 模拟了一个16个摄像机的场景,有不开多线程和打开多线程的对比。 可以明显感觉到打开多线程后主界面不卡了。 ...

    delphi多线程调用dll

    在Delphi编程中,多线程技术被广泛用于提高应用程序的执行效率,特别是在处理大量数据或执行长时间操作时。DLL(动态链接库)是Windows操作系统中的一个重要组件,它允许代码和资源在多个程序之间共享。当需要在多...

    excel vba 多线程 实例

    excel vba 多线程 实例 excel vba 多线程 实例

    MFC多线程完整总结及示例代码

    MFC 多线程完整总结及示例代码 多线程是一种重要的编程技术,用于实现并行处理和提高系统性能。在 MFC 中,多线程编程可以通过 Win32 API 函数和 MFC 类库来实现。在本文中,我们将对多线程的基本概念、多线程编程...

    java 多线程操作数据库

    ### Java多线程操作数据库:深入解析与应用 在当今高度并发的应用环境中,Java多线程技术被广泛应用于处理数据库操作,以提升系统的响应速度和处理能力。本文将基于一个具体的Java多线程操作数据库的应用程序,深入...

    QT+OPENGL 多线程测试

    QT+OpenGL多线程测试是将高性能图形渲染与Qt框架结合的一种技术应用,它通过利用多线程的优势来提升程序的运行效率。在本项目中,开发者采用了2D纹理贴图的方法,使得图像处理和显示更为高效。接下来,我们将深入...

Global site tag (gtag.js) - Google Analytics