`
kgdso
  • 浏览: 87931 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java线程安全机制

 
阅读更多

一。为什么需要多线程

1. 与用户的更好交互(Better Interaction with the User),减少响应等待 

2. 模拟同时进行的活动(Simulation of Simultaneous Activities) 

3. 开发利用多处理器(Exploitation of Multiple Processors) 

4. 简化对象建模(Simplify Object Modeling) 

5. 当等待慢的I/O操作时,可以做其他事情(Do Other Things While Waiting for Slow IO Operations) 

二。什么是线程安全(摘自百度百科)

      如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
  或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
  线程安全问题都是由全局变量及静态变量引起的。
  若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。

 

三。如何保证线程安全

1. 使用synchronized关键字

 

/**
	 * 以this为锁的同步代码
	 */
	public synchronized void testSyn(){
		System.out.println("testSyn");
	}
	/**
	 * 对这个类的所有对象都用同一个锁
	 */
	public static synchronized void testSyn2(){
		System.out.println("testSyn2");
	}
	
	/**
	 * 对这个类的所有对象都用同一个锁。
	 */
	public void testSyn3(){
		synchronized(TestRunner.class){
			System.out.println("testSyn2");
		}
	}

 

2. volatile
     volatile 修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。
    优势:这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。  

 

 3. ThreadLocal
    ThreadLocal 保证不同线程拥有不同实例,相同线程一定拥有相同的实例,即为每一个使用该变量的线程提供一个该变量值的副本,每一个线程都可以独立改变自己的副本,而不是与其它线程的副本冲突。

优势:提供了线程安全的共享对象

与其它同步机制的区别:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信;而 ThreadLocal 是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源,这样当然不需要多个线程进行同步了。

分享到:
评论

相关推荐

    java线程安全总结.pdf

    理解和掌握这些Java线程安全机制是编写高效、稳定的并发程序的关键。在实际开发中,应根据具体需求选择合适的同步策略,避免过度同步导致性能下降,同时也要注意防止可能出现的并发问题,如死锁、活锁和资源饥饿。

    java线程安全总结.doc

    Java线程安全是多线程编程中的一个关键概念,它涉及到在并发环境下如何正确地管理共享资源,确保程序的正确性和一致性。以下是对Java线程安全的深入总结: ### 一、线程安全的定义 线程安全是指当多个线程访问同一...

    java线程安全测试

    Java线程安全是多线程编程中的一个关键概念,它涉及到多个线程访问共享资源时可能出现的问题。在Java中,线程安全问题通常与并发、内存模型和可见性有关。Java内存模型(JMM)定义了如何在多线程环境下共享数据的...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    java线程线程安全同步线程

    总的来说,理解和掌握Java线程的创建、状态管理、同步机制和线程安全是进行多线程编程的基础,这对于开发高效、稳定的并发程序至关重要。在实际编程中,应充分利用Java提供的工具和机制,避免潜在的并发问题,提升...

    java多线程机制 详解

    Java的多线程机制是Java语言的一大特性,它允许程序同时执行多个任务,提升程序响应速度,优化资源利用率。在Java中,线程是程序执行的最小单位,一个进程可以包含多个线程,每个线程都有自己独立的生命周期,包括...

    Java多线程同步机制研究分析.pdf

    synchronized方法的使用可以确保多个线程不会同时访问共享资源,避免了线程安全问题。 四、synchronized块的使用 synchronized块是Java多线程同步机制中的一种同步方式。它可以将程序的某段代码使用synchronized块...

    JAVA多线程机制

    Java多线程机制是Java编程中的重要组成...总结来说,Java多线程机制为我们提供了丰富的手段来实现并发编程,包括线程的创建、线程同步和线程安全。理解和掌握这些知识,能够帮助开发者构建高效、可靠的多线程应用程序。

    java内存模型和线程安全

    java内存模型和线程安全,详细解析java的 堆栈模型和线程机制

    Java多线程 - (一) 最简单的线程安全问题

    总之,理解并掌握Java中的线程安全问题及其解决方案是每个Java开发者必备的技能,这不仅可以确保程序的正确性,还能有效利用多核处理器,提升系统性能。在阅读源码时,也要注意观察作者如何处理线程安全,这对于提升...

    Java线程安全.docx

    "Java线程安全" Java线程安全是指在多线程并发编程...Java线程安全是多线程并发编程中的一大难题,解决这个问题需要了解Java内存模型、可见性和有序性问题,并使用适当的同步机制来确保线程安全地访问和修改共享资源。

    java线程安全以及生产者消费者demo

    Java线程安全与生产者消费者模型是多线程编程中的两个重要概念,它们在并发处理中扮演着关键角色。在Java中,线程安全是指一个类或者方法在多线程环境下能够正确地处理数据,避免数据的不一致性或竞态条件。而生产者...

    Java多线程-线程的安全问题与线程的同步机制介绍

    在 Java 多线程编程中,线程安全问题是非常重要的一个话题。当多个线程访问同一个资源时,如果只有读操作那么不会出现线程安全问题,但是如果多个线程对资源进行读和写操作时,就容易出现线程安全问题。下面我们来...

    JAVA线程安全及性能的优化.doc

    ### JAVA线程安全及性能优化的关键知识点 #### 一、JAVA内存模型与线程安全的基础概念 **JAVA内存模型**是理解线程安全的核心。不同的操作系统平台可能有不同的内存管理方式,但Java虚拟机(JVM)提供了一套统一的...

    java的线程同步机制synchronized关键字的理解_.docx

    Java 线程同步机制中 synchronized 关键字的理解 Java 的线程同步机制是为了解决多个线程共享同一片存储空间所带来的访问冲突问题。其中,synchronized 关键字是 Java 语言中解决这种冲突的重要机制。 ...

    Java线程详解大全

    总之,Java线程是并发编程的基础,理解和掌握线程的生命周期、实现方式和同步机制对于编写高效、安全的多线程程序至关重要。在实际应用中,根据需求选择合适的线程实现策略,并结合同步机制,可以有效地利用系统资源...

    Java线程(第三版)

    《Java线程(第三版)》是一本深入探讨Java线程技术的专业书籍,旨在帮助开发者理解和掌握Java平台上的多线程编程。Java线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而充分利用系统资源,提高程序的...

    Java多线程同步机制的应用分析.pdf

    Java多线程同步机制可以帮助开发者避免这些问题,提高系统的可靠性和安全性。 在售票系统中,Java多线程同步机制可以用于解决售票冲突问题。例如,多个用户同时购买同一个票据时,可能会发生冲突。通过使用同步机制...

    java线程深入解析

    本文将深入解析Java线程的相关知识点,包括线程的定义、创建、状态管理、线程同步和安全问题。 1. **线程定义** 在Java中,线程是进程中的单一顺序控制流,是程序执行的基本单元。线程在进程的上下文中运行,共享...

    java线程安全总结

    Java线程安全是多线程编程的基础,它涉及到内存模型、同步机制等多个方面。正确理解和运用这些机制是编写高效、稳定多线程程序的关键。随着Java技术的发展,越来越多的工具和框架被引入到并发编程中,这使得开发者...

Global site tag (gtag.js) - Google Analytics