`

Java中线程安全问题个人理解

阅读更多

线程安全问题是一个比较高深的问题,是很多程序员比较难掌握的一个技术难点,如果一个程序员对线程掌握的很好的话,那么这个程序员的内功修炼的是相当的好。

在这里我主要说一下我对java中如何保证线程安全的一些个人见解,希望对各位有所帮助,那里有不对的地方敬请给位不吝赐教。

线程安全问题主要出现在访问临界资源的时候,就是访问同一个对象的时候,可能会出现无法挽回的损失,特别是在关于资金安全方面的时候,当然还有数据库事务方面的问题。他们很类似,都是要保证数据的原子性。

那么在java中如何保证线程安全呢?

对与共同使用的对象进行加锁,意思是我使用的时候,那么你就必须等待,等我用完之后你再用,反之依然。就像上厕所,你去的时候我是不能去的。

如何加锁呢?下面写三个加锁的方式

首先看一下实例代码


以上代码没有对共同持有的对象outerput加锁,所以会出现线程安全问题

1,对代码块加锁

对共同持有的对象加锁可以把内部类写成这样的


2,对非静态方法加锁,加锁的对象是this


3,对静态方法加锁的对象到底是谁?


其实加锁的对象是字节码对象,Outerput.class

如果和非静态方法同时持有同一个对象时,可以持有同一个字节码对象。

分享到:
评论
5 楼 flystar007 2012-07-03  
synchronized
4 楼 yz_looksun 2012-07-03  
有个问题一个程序如何判断他是不是线程安全的?
3 楼 deny_guoshou 2012-03-14  
flystar007 写道
调用方法时候,本身就有一个this 对象指向调用的当前对象

有点难理解。再摸索摸索。。谢谢!
2 楼 flystar007 2012-03-12  
调用方法时候,本身就有一个this 对象指向调用的当前对象
1 楼 deny_guoshou 2012-03-08  
请问楼主:文章中的,1、2、3的三个例子中,是如何判断它们各自是对哪个对象加锁的??

相关推荐

    java多线程设计模式详解(PDF及源码)

    本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA...

    java多线程设计模式详解.pdf

    为了达到线程安全和有效管理多线程的目的,读者需要对Java的并发API有深入理解,如java.util.concurrent包中的类和接口,以及Java内存模型和线程生命周期等概念。同时,由于涉及到设计模式,读者还需要对软件设计...

    Java多线程编程实战指南核新篇&设计篇&以及和核新篇的案例代码

    这部分可能会涵盖设计模式,比如生产者消费者模式、单例模式(尤其是线程安全的单例)、读写锁模式等,这些都是在并发环境中常见的设计模式。同时,还会讲解如何避免并发问题,如死锁、活锁、饥饿等,并提供解决这些...

    java模拟多线程买票问题.docx

    在Java编程中,多线程买票问题是演示并发控制...总的来说,多线程买票问题展示了Java并发编程中的同步和锁机制,这些是理解和编写高效并发程序的基础。了解和掌握这些技术,对于开发高并发、高性能的Java应用至关重要。

    3个厨师做蛋糕,5个顾客吃蛋糕(java 线程问题)

    在这个“3个厨师做蛋糕,5个顾客吃蛋糕”的例子中,我们可以通过多线程技术来模拟一个蛋糕店的运营场景,这有助于理解Java线程同步和资源管理的概念。 首先,我们需要创建三个“厨师”线程,它们代表蛋糕制作的过程...

    java线程实例,赛跑小游戏

    下面我们将深入探讨Java线程的关键知识点以及如何在赛跑小游戏中应用它们。 1. **线程的创建**:在Java中,有两种主要的线程创建方式。一是通过`Thread`类的子类化,重写`run()`方法,然后创建子类的实例并调用`...

    吃放水果 java(多线程)

    5. 使用适当的同步机制(如synchronized关键字或Lock接口)确保在多线程环境下对水果状态的修改是安全的,防止数据竞争问题。 通过这个项目,初学者不仅能学习到Java GUI编程的基本知识,还能掌握多线程的创建、...

    java多线程_设计模式_各种技术(我的书架)

    此外,单例模式在多线程环境中需要考虑线程安全问题,通常采用双重检查锁定或静态内部类等方式实现。 这个资源中的"设计模式:Java语言中的应用.pdf"很可能详细阐述了如何将设计模式应用于Java编程中,包括但不限于...

    手把手教你:如何用Java多线程模拟银行叫号服务.pdf

    BlockingQueue是一个线程安全的数据结构,它可以自动处理线程间的通信和同步。 我们创建一个BlockingQueue来存储客户的叫号号码,每当有新客户到达时,将其号码放入队列。窗口线程会从队列中取出号码,然后为对应的...

    Java平台及应用Java技术的安全问题.zip

    7. **线程安全问题**:并发编程时,如果没有正确处理同步和锁,可能导致数据不一致或暴露内部状态。理解并正确使用Java并发工具是关键。 8. **依赖库的安全性**:依赖的第三方库可能含有未知的漏洞。定期更新和审计...

    多线程精品资源--java-study 是本人学习Java过程中记录的一些代码!从Java基础的数据类型、jdk1..zip

    【标题】中的“多线程精品资源--java-study”表明这是一个关于Java多线程学习的资源集合,而“是...这些内容都是Java多线程学习过程中的关键点,通过这些知识点的学习和实践,可以提升对Java并发编程的理解和应用能力。

    多线程基础个人总结思维导图

    本文将深入探讨多线程的基础知识,包括进程与线程的概念,同步机制,多线程安全问题,以及单例设计模式,并简单提及死锁现象。 首先,我们需要了解**进程与线程**的基本概念。进程是操作系统资源分配的基本单位,...

    《深入理解Java 7 核心技术与最佳实践》PDF版本下载.txt

    - **多线程编程**:详细介绍了Java中的多线程编程技术,包括线程的创建、同步、通信等关键概念。 - **网络编程**:讲解了Java网络编程的相关知识,包括Socket编程和HTTP编程等内容。 #### 3. **高级特性** - **...

    JAVA多线程技术分享-39页PPT(winding)

    接着,锁机制在多线程安全中起到关键作用。乐观锁假设并发冲突较少,读多写少的情况,减少锁的使用;悲观锁则是总是假设会发生冲突,采用加锁机制。自旋锁等待持有锁的线程释放,如果立即获得则继续执行,否则会循环...

    一些学习资料(EJB,word,excel,java多线程)

    多线程编程需要考虑同步问题,Java提供了synchronized关键字、wait()和notify()方法,以及Lock接口和相关的实现(如ReentrantLock)来确保线程安全。 最后,尽管没有具体提到Word的学习资料,但在文档处理方面,...

    JAVA线程关于生产者和消费者问题代码个人修改版

    ### JAVA线程中的生产者与消费者问题解析及代码解读 #### 一、生产者与消费者问题简介 在多线程编程中,“生产者-消费者”模式是一种常见的解决资源分配问题的方法,尤其适用于处理数据流或者任务队列。该模式通过...

    TCP-socket.zip_java_java Tcp _java socket _socket_socket多线程

    这个学习资源可以帮助我们深入了解Java中的TCP Socket编程和多线程技术。 首先,让我们来看看TCP协议。TCP是一种面向连接的、可靠的传输协议,它保证了数据包在传输过程中的顺序和完整性。通过三次握手建立连接,四...

    使用Java理解程序逻辑PPT

    **Java编程语言与程序逻辑** Java是一种广泛使用的高级编程语言,以其“一次编写,到处运行”的跨平台特性而闻名。...对于每一个主题,深入学习和理解其背后的原理和应用,将有助于提升个人的编程技能和问题解决能力。

    java个人银行系统

    总的来说,学习和分析【Java个人银行系统】项目,可以从多个方面提升Java编程技能,同时对数据库操作、软件架构设计和项目管理有深入的理解。对于初学者来说,这是一个很好的实践项目,有助于理论知识与实际应用的...

    java项目开发常见问题分析

    2. **影响性能及系统稳定性相关问题**:Java项目中的性能问题通常与内存管理、线程安全、数据库查询效率等有关。过度使用全局变量可能导致内存泄漏,不恰当的并发控制可能引发死锁或竞态条件。为提高性能,开发者应...

Global site tag (gtag.js) - Google Analytics