`

线程安全的深入研究

    博客分类:
  • Java
阅读更多

1、什么是线程安全(thread safe)?
        一个类要成为线程安全的类,就是在该类被多个线程访问时,不管运行环境中执行这些线程有什么样的时序安排或者交错,它仍然执行正确行为,并且在调用的代码中没有任何额外的同步。

2、什么时候考虑线程安全问题?
       当一个类的实例为singleton的时候,你就要考虑该实例在调用的时候是否是线程安全的。
       最熟悉的例子就是servlet, 每个servlet在servlet engineer中只有一个实例。除非它实现SingleThreaded接口。所以我们一般要求在servlet中不要定义成员变量,以避免线程不安全。
       是不是凡是singleton的对象都不是线程安全的呢?答案是No。准确的表达应该是: 只有该类中定义了有状态的成员时该类才是线程不安全的
举个例子:

public class A{
    String id ;
    public void process(){
       print(id);
       ...
    }
}
 


       id是一个有状态的变量。什么是有状态,就是指每次调用该类的时候如果该id值可能存在不同的值,那么这个id就是有状态的。

我们再看看下面的例子。

public class B{
    public void process(){
     int i;
     int j;
          
     println(i*y);
    }
}
 


        这个class B在单实例的情况下就是线程安全的。原因是:该类没有有状态的成员。i,j是局部变量,某个线程都会有自己的stack保存这些局部变量。所以对于不同线程来说,这些变量是相互不影响的。

        对于存在线程不安全的类,如何避免出现线程安全问题呢?
1、采用synchronized同步。缺点就是存在堵塞问题。
2、使用ThreadLocal(实际上就是一个HashMap),这样不同的线程维护自己的对象,线程之间相互不干扰。

总结:
1、我们一般要求商业逻辑的BO为线程安全的类,这样就可以将该BO创建成一个单实例的对象,提高访问的效率。为了使BO为线程安全的对象,我们所要做的很简单,就是该类中不要有与状态相关的成员变量。

分享到:
评论

相关推荐

    深入研究Servlet线程安全性问题

    深入研究Servlet线程安全性问题...

    C#线程安全的事件类研究报告

    通过这份研究报告,你将能够深入理解C#中线程安全事件的实现,避免因并发操作引发的错误,从而编写出更稳定、高效的多线程应用程序。提供的"如何在一个类型中定义多个自定义的线程安全的事件.pdf"文件应该包含了更多...

    深入研究Servlet线程安全性问题.pdf

    ### 深入研究Servlet线程安全性问题 #### 一、引言 Servlet技术作为Java Web开发中的核心组件之一,因其高效性和灵活性被广泛应用于Web应用程序的开发中。Servlet能够处理HTTP请求,并产生相应的响应。它的一个...

    c#线程安全的源代码示例

    通过深入研究这些示例,你可以更好地理解如何在实际项目中应用这些技术,以确保代码的线程安全,避免可能出现的并发问题。记住,线程安全不仅关乎程序的正确性,也直接影响到应用程序的性能和稳定性。

    ado数据连接线程安全delphi源码

    通过研究这些源码,开发者可以学习如何在多线程的Delphi应用中正确地管理和使用ADO连接,确保程序的稳定性和性能。 总之,理解并正确应用线程安全的ADO连接是Delphi开发中不可或缺的部分。这包括在每个线程内初始化...

    基于C++的线程安全容器。.zip

    项目文件"SJT-code"可能包含了实现这些线程安全容器的源代码,学生可以仔细研究代码结构,学习如何在实际项目中应用线程安全技术。同时,通过阅读和调试代码,他们还能了解如何进行单元测试和性能优化,这些都是软件...

    c#官方线程安全集合源码

    让我们深入探讨其中几个关键的线程安全集合:`ConcurrentBag<T>`, `ConcurrentQueue<T>`, `ConcurrentStack<T>`, 和 `ConcurrentDictionary, TValue>`。 1. **ConcurrentBag** `ConcurrentBag<T>` 是一个线程安全...

    C#线程安全和跨线程问题

    在“C#线程安全和跨线程问题”这个主题中,我们将深入探讨如何处理这些复杂性。 线程安全是指一个类或方法在多线程环境下能够正确地工作,不会因为并发访问而导致数据不一致或意外的行为。在C#中,线程安全通常涉及...

    第17章 - 深入研究容器 - Collection(List,Set,Queue)的性能测试框架(单线程中)(P501)

    在深入研究Java集合框架,特别是List、Set和Queue的性能测试时,我们通常会关注它们在单线程环境中的表现。这些容器是Java编程中不可或缺的一部分,用于存储和管理对象。本章将探讨如何构建一个性能测试框架来比较...

    libevent多线程处理

    **正文** Libevent是一个高效的事件通知库,它允许程序员对多个事件源进行异步非阻塞的处理。...通过深入研究"libeventThread"示例,开发者可以更好地掌握如何在实际项目中运用Libevent的多线程特性。

    vb6实现安全多线程的ActiveX组件

    标题“vb6实现安全多线程的ActiveX组件”揭示了这个压缩包包含的是一个针对Visual Basic 6(VB6)开发的ActiveX组件...通过深入研究这些文件,开发者可以学习如何在VB6中正确地实现和管理多线程,提升自己的编程技能。

    Solaris操作系统多线程安全机制的研究和应用

    ### Solaris操作系统多线程安全机制的研究和应用 #### 引言 随着计算机技术的发展,多线程编程已经成为提高程序效率和响应性的关键技术之一。在众多操作系统中,Solaris因其强大的稳定性和安全性,在服务器领域...

    Java多线程与线程安全实践-基于Http协议的断点续传

    在Java编程中,多线程和线程安全是两个至关重要的概念,特别是在处理高并发、大规模数据处理以及网络通信时。...而项目中的具体实现细节,包括线程池的配置、同步机制的设计、异常处理策略等,都值得深入研究和探讨。

    基于Java的多线程技术应用研究

    ### 基于Java的多线程技术应用研究 #### 摘要 本文主要针对Java平台中的多线程技术及其应用进行深入探讨。重点分析了多线程机制中的核心概念,包括线程调度模式、同步互斥机制、内置多线程功能等内容,并对线程的...

    JAVA多线程与线程安全实践-基于Http协议的断点续传【毕业论文】.zip

    在Java编程领域,多线程和线程安全是高级特性,尤其在开发高效并发应用程序时至关重要。...接下来,我们将详细讨论相关知识点。...通过深入研究和实践这些知识点,开发者可以在实际项目中构建更强大、更可靠的并发应用。

    C# 单例模式详解与线程安全性实现

    内容概要:本文详尽地阐述了 C# 中单例模式的设计思想以及其实现方式,并且特别针对单例模式的线例...方法来代替lock达到更加简明的线程安全代码设计也可以自行进一步深入探索和研究,提高代码效率的同时保证安全性。

    EXCEL VBA多线程研究 DEMO

    可以使用锁、事件对象等机制确保线程安全。 2. **错误处理**:线程中的错误处理必须谨慎设计,因为错误可能在任何线程中发生,需要有适当的异常处理机制。 3. **资源管理**:确保线程在完成任务后正确终止,释放占用...

    Java多线程与线程安全实践-基于Http协议的断点续传论文.pdf

    6. 关键技术关键词:多线程(Multithreading)、线程安全(Threadsecurity)、断点续传(Broken/Resume)等关键词反映了这篇论文的主题和研究方向。 7. 技术细节的深入探讨:文档内容中提到了一些章节编号,比如1.1...

Global site tag (gtag.js) - Google Analytics