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线程的知识点总结。doc
C# 多线程 笔记 适合 初学者 共含所有7个word文档,转载
C#多线程笔记 每个窗体都有自己的都在不同的线程上运行,如果需要在窗体之间交互,就需要在线程之间交互。
C#多线程笔记学习指南
java多线程笔记分享
详细的Java多线程笔记,一共17章,能够让你更加了解多线程.线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
java中的多线程笔记
使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义、实例化和启动新线程。 一个Thread类实例只是一个对象,像Java中的任何其他对象一样,具有变量和方法,生死于堆上。 Java中,每个线程都有一个...
Python3 多线程
马士兵多线程训练营笔记
多线程学习笔记 包含doc文档笔记加笔记中出现的代码(博文地址共上中下)http://blog.csdn.net/cloudyxuq/article/details/6941404
java中数据流和多线程较深入的了解,这是分享别人的学习笔记
对多线程进行全面学习的笔记,里面包含简单到复杂的多线程的基础知识