`
学已制用
  • 浏览: 419 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java并发编程线程安全问题

阅读更多

1.线程安全:管理对共享的可变状态的访问。状态----指的是静态变量或实例变量。

2.共享:静态变量----类的使用者共享,实例变量----对象使用者共享。--目的:线程间相互交流

3.可变:对变量有写的过程,只读当然就是不可变的。

4.原子操作:意为"不可被中断的一个或一系列操作"

5.解决线程安全的思路:(对应一场安全的考试的情景)

    (1)共享变量只读;----不可变性
        情景示例:放英语听力
        代码示例:单例(饿汉式)

package chapter1.singelton01;
public class MyObject {
	//共享的静态变量,只有这里初始化,其他任何地方都不能写入
	private static MyObject myObject = new MyObject();
	
	private MyObject() {
	}
	
	public static MyObject getInstance(){
		return myObject;
	}
}
public class MyThread extends Thread {
	@Override
	public void run() {
		System.out.println(MyObject.getInstance().hashCode());
	}
}
public class Run {
	public static void main(String[] args) {
		MyThread t1 = new MyThread();
		MyThread t2 = new MyThread();
		MyThread t3 = new MyThread();
		t1.start();
		t2.start();
		t3.start();
	}
}
三个线程访问的结果相同

       使用场景示例:dao层写的sql语句---private static final String SQL_INSERT = ""
                               用spring容器管理的单例bean,多数情况我们保证bean对象的不可变性

 

(2)可变变量不共享:----线程封闭

        情景示例:每个考生一份试卷
        代码示例:

package chapter1.t0020;
public class MyThread extends Thread {
	private int count = 5;
	public MyThread(String name) {
		super();
		this.setName(name);
	}
	@Override
	public void run() {
		super.run();
		while(count>0){
			count--;
			System.out.println("由"+MyThread.currentThread().getName()+"计算,count="+count);
		}
	}
}

public class Run {
	public static void main(String[] args) {
		MyThread myThread1  = new MyThread("A");
		MyThread myThread2  = new MyThread("B");
		MyThread myThread3 = new MyThread("C");
		myThread1.start();
		myThread2.start();
		myThread3.start();	
	}
}
myThread1 、myThread2、 myThread3每个对象都有自己的 count 变量 

       使用场景示例:struts2的action的原型模式,每个线程有自己的action对象
        ThreadLocal变量的设计

 

(3)共享可变的变量原子操作:----加锁

        情景示例:阅卷老师改完一题,交给下一位老师改下一题
        代码示例:单例(懒汉式)

public class MyObject {
	private static MyObject myObject;	
	private MyObject() {
	}	
	public synchronized static MyObject getInstance(){
		if(myObject!=null){
			
		}else{
			myObject = new MyObject();
		}
		return myObject;
	}
}

public class MyThread extends Thread {
	@Override
	public void run() {
		System.out.println(MyObject.getInstance().hashCode());
	}
}

public class Run {
	public static void main(String[] args) {
		MyThread t1 = new MyThread();
		MyThread t2 = new MyThread();
		MyThread t3 = new MyThread();
		t1.start();
		t2.start();
		t3.start();
	}
}

   使用场景示例:spring对bean的初始化,ConcurrentMap实现

 

锁带来的问题,以及解决这些问题锁产生的新的方案----很多技术都是对另一种技术的补充,没有替代关系,只有在特定的时间,特定的场合更适合。你的工作是找到更适合的方案,并使用它。

分享到:
评论

相关推荐

    java并发编程实战源码,java并发编程实战pdf,Java

    2. **线程安全**:当多个线程访问同一块资源时,如果需要保证数据的一致性和完整性,就需要考虑线程安全问题。Java提供了各种手段来实现线程安全,如synchronized关键字、volatile变量、ThreadLocal等。 3. **并发...

    Java 并发编程实战.pdf

    《Java并发编程实战》这本书是关于Java语言中并发编程技术的经典著作。它详细介绍了如何在Java环境中有效地实现多线程程序和并发控制机制。在Java平台上,由于其本身提供了强大的并发编程支持,因此,掌握并发编程...

    《java 并发编程实战高清PDF版》

    《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南。这本书旨在帮助开发者理解和掌握在Java环境中创建高效、可扩展且可靠的多线程应用程序的关键技术和实践。它涵盖了从基本概念到高级主题的广泛内容,...

    java并发编程2

    Java并发编程是Java开发中的重要领域,特别是在多核处理器和分布式系统中,高效地利用并发可以极大地提升程序的性能和响应速度。以下是对标题和描述中所提及的几个知识点的详细解释: 1. **线程与并发** - **线程*...

    java并发编程艺术

    并发集合是Java并发编程中的重要组成部分,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `ConcurrentLinkedQueue`等,它们设计为线程安全,能够在并发环境中高效地工作。书中的章节可能会详细解释这些集合的设计...

    JAVA并发编程艺术pdf版

    通过深入学习《JAVA并发编程艺术》,开发者能更好地理解并发编程的原理,熟练运用Java提供的并发工具和API,解决实际开发中的多线程问题,提高软件的性能和稳定性。这是一本值得每一位Java开发者研读的书。

    java并发编程内部分享PPT

    此外,Java并发编程还包括对并发容器的使用,如ArrayList、LinkedList、HashSet、HashMap等基础容器在并发环境下可能存在问题,Java提供了一些线程安全的容器,如Vector、HashTable以及java.util.concurrent包下的...

    Java并发编程实战华章专业开发者书库 (Tim Peierls 等 美Brian Goetz).pdf

    《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南,由Tim Peierls等人与Brian Goetz合著,旨在帮助Java开发者理解和掌握在多线程环境中编写高效、安全的代码。这本书由拥有丰富经验的JDK并发大师及...

    java 并发编程的艺术pdf清晰完整版 源码

    《Java并发编程的艺术》这本书是Java开发者深入理解并发编程的重要参考书籍。这本书全面地介绍了Java平台上的并发和多线程编程技术,旨在帮助开发者解决在实际工作中遇到的并发问题,提高程序的性能和可伸缩性。 ...

    Java并发编程实践高清pdf及源码

    《Java并发编程实践》是一本深入探讨Java多线程编程的经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowles和David Holmes等专家共同编写。这本书全面介绍了Java平台上的并发编程技术,是Java开发...

    java并发编程实践pdf笔记

    Java并发编程实践是Java开发中不可或缺的一个领域,它涉及到如何高效、正确地处理多线程环境中的任务。这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的...

    JAVA并发编程实践.pdf+高清版+目录 书籍源码

    《JAVA并发编程实践》这本书是Java开发者深入理解并发编程的重要参考资料。它涵盖了Java并发的核心概念、工具和最佳实践,旨在帮助读者在多线程环境下编写高效、安全的代码。 并发编程是现代软件开发中的关键技能,...

    java并发编程书籍

    Java并发编程是软件开发中的一个关键领域,尤其是在大型企业级应用和分布式系统中。通过学习相关的书籍,开发者可以深入理解如何有效地设计和实现高效的多线程应用程序,避免并发问题,如竞态条件、死锁、活锁等。...

    java并发编程实战(英文版)

    对于那些需要解决复杂并发问题的高级开发者,《Java并发编程实战》提供了许多实用的技术和设计模式,例如: - **不可变对象**:介绍如何设计不可变对象以提高代码的安全性和效率。 - **锁分离**:讲解锁分离技术,...

    Java并发编程实践.pdf

    ### Java并发编程实践 #### 一、并发编程基础 ##### 1.1 并发与并行的区别 在Java并发编程中,首先需要理解“并发”(Concurrency)和“并行”(Parallelism)的区别。“并发”指的是多个任务在同一时间段内交替...

    java并发编程与实践

    "Java并发编程与实践"文档深入剖析了这一主题,旨在帮助开发者理解和掌握如何在Java环境中有效地实现并发。 并发是指在单个执行单元(如CPU)中同时执行两个或更多任务的能力。在Java中,这主要通过线程来实现,...

    java并发编程

    Java并发编程是Java开发者必须掌握的关键技能之一,它涉及到如何在多线程环境中高效、安全地执行程序。并发编程能够充分利用多核处理器的计算能力,提高应用程序的响应速度和整体性能。《Java编程并发实战》这本书是...

    java并发编程实践(中文版pdf全部40M分2部分上传)2

    《JAVA并发编程实践》既能够成为读者的理论支持,又可以作为...《JAVA并发编程实践》适合于具有一定Java编程经验的程序员、希望了解Java SE 5以及6在线程技术上的改进和新特性的程序员,以及Java和并发编程的爱好者。

Global site tag (gtag.js) - Google Analytics