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

多线程笔记

 
阅读更多

1、synchronized以线程为单位,不是以调用为单位,通过线程中,如果这个线程已经获得了锁,则这个线程中的所有函数都获得锁,可以进入这个锁锁定的范围,也就是reentrancy。如

   public class A {public synchronized add(){};}

   public class B extends A{public synchronized add(){super.add()}};

   B.add获得对象锁后,在调用super.add()就不会出现死锁问题,也就是锁重进入

 

2、AtomicLong,AtomicReference等方便的原子计数器

 

3、synchronized是排斥锁,JDK1.5后有个类似的叫信号的家伙Semaphore,Semaphore可以定义同时有多少个访问量,当为1是就是synchronized类似,不过没synchronized安全,也不具备reentrancy功能,如果在第一点中改用semaphore,容易产生死锁。

 

4、对于long和double,在64位下,如果没什么volatile或者读写加上synchronized时,VM将它们分成32位的读写操作,因此线程不安全。volatile表示不允许VM优化这个变量的读取和写入,也就是读时不会同时写,写时也不会发生读,(但是不保证多个同时写的结果一致性)从而保证原子性。不推荐使用volatile,因为难以理解,volatitle只保证可见性(能够看到和获取别的线程修改了值),不保证操作原子性定,如果能确定只有一个线程在写,其他线程都只是读时,volatitle就和synchronized效果一样,如果多线程写,则volatitle无法保证写的结果是一致的,因此不能和synchronized一致

 

5、ThreadLocal对象保证线程不共享

 

6、不用错误发布对象,尤其对象引用,导致不安全性,可以使用ConcurrentMap,SynchronizedMap,hashtable,vector,concurrentlinkedqueue,blockingqueue等线程安全的容器存放对象引用,它们会安全的将引用发布到其他线程中。

SynchronizedMap,Hashtable,ConcurrentHashMap差别见 http://vanadiumlin.iteye.com/blog/1201622

 

 

 

 

 

分享到:
评论

相关推荐

    Java多线程笔记

    Java多线程笔记 Java多线程笔记是 Java 编程语言中关于多线程编程的笔记,涵盖了线程基础知识、线程优先级、线程状态、守护线程、构造线程、线程中断等多方面的内容。 获取简单 main 程序中的线程 在 Java 中,...

    马士兵多线程笔记.zip

    以下是对马士兵多线程笔记的详细解析。 1. **多线程基础**:多线程是指一个应用程序中同时执行多个线程(即任务)的能力。这种并发执行可以提高系统资源的利用率,提升程序的响应速度和执行效率,特别是在多核...

    java多线程笔记

    Java线程的知识点总结。doc

    多线程笔记.md

    多线程笔记

    C# 多线程笔记和示例讲解

    以下是对"C#多线程笔记"中可能包含的知识点的详细解释。 1. **线程基础**: - **什么是线程**:线程是程序执行的最小单元,每个进程至少有一个线程,负责执行程序代码。 - **主线程与子线程**:主线程是程序的...

    java多线程笔记全手打

    通过阅读`多线程笔记.doc`和运行`threadDemo`示例代码,你可以对Java多线程有更深入的理解,并能够在实际项目中灵活运用这些知识,解决并发问题。同时,博客地址提供了更多详细内容,可以帮助你进一步探索和实践。

    java多线程笔记分享

    java多线程笔记分享

    10.8-10.9马老师多线程笔记synchronized .md

    10.8-10.9马老师多线程笔记synchronized .md

    Python3 多线程笔记

    ### Python3多线程知识点详解 #### 一、线程基础 **线程状态** 在探讨Python3中的多线程之前,我们首先需要理解线程的基本状态及其转换过程。 - **新建**: 当一个线程被创建后,它最初处于新建状态。 - **就绪**...

    C#多线程笔记学习指南

    本篇笔记将深入探讨C#多线程的基本概念、操作方法以及注意事项。 首先,我们要理解多线程的基本概念。线程是程序执行的最小单位,每个线程都有自己的执行路径和栈空间,但它们共享同一块堆内存。因此,线程间的通信...

    C#多线程笔记

    ### C#多线程知识点详解 #### 一、线程与窗体间的交互 在C#编程中,每个窗体通常都运行在一个独立的线程上。这意味着如果一个应用程序包含多个窗体,那么这些窗体将分别运行在各自的线程之上。当需要实现不同窗体...

    多线程笔记.docx

    Java多线程是Java编程中不可或缺的部分,它允许程序同时执行多个任务,从而提升程序的效率和CPU的利用率。在Java中,线程是程序执行的最小单位,而进程则是资源分配的基本单位。一个进程可以包含一个或多个线程,...

    马士兵多线程训练营笔记

    马士兵是一位知名的IT教育专家,他的多线程训练营笔记深入浅出地讲解了这一主题,帮助开发者理解并掌握多线程的精髓。 多线程允许一个程序中有多个执行流同时运行,这样可以提高应用程序的效率和响应性。在Java中,...

    多线程笔记_java/多线程_

    在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在开发高效能和响应迅速的应用时。本文档将全面解析多线程的基础知识,从简单到复杂,帮助开发者深入理解并掌握这一核心技术。 一、多线程基础 1.1 线程...

    数据流和多线程笔记

    ### 数据流和多线程知识点总结 #### 一、数据流概述 数据流(Stream)在计算机编程领域中,指的是数据传输的一种模式。通常用于描述数据的输入与输出过程。在Java语言中,数据流是一种非常重要的机制,主要用于...

    Java多线程详解(超详细)_狂神说笔记完整版_项目代码_适合小白随课程学习

    Java多线程详解 在Java编程中,多线程是一种重要的技术,它使得程序能够同时执行多个任务,提高系统的效率和响应性。本教程将详细讲解Java中的多线程概念,包括线程的创建、状态、同步以及高级主题,旨在帮助初学者...

Global site tag (gtag.js) - Google Analytics