保证线程安全方法 :
1, 不要跨线程访问共享变量
2, 使共享变量是 final类型的
3, 将共享可变数据的操作加上同步
当多线程共享可变数据时,每个读或者写的线程都必须执行同步。
可变数据同步方法:
1. synchronized
2. volatile 共享原子数据,非原子操作也要同步
3. ReentrantLock锁
4. Atomic类
5. 并发集合CopyOnWriteList、ConcurrentHashMap、BlockingQueue
6. concurrent框架
7. executor框架
反面案例
/**
* Broken! requires synchronization!
*/
public class SerialNumUtils {
public static volatile int serialNum = 0;
public static int getNetSerialNum() {
return serialNum++;
}
}
正确示例1
/**
* volatile synchronized
*/
public class SerialNumUtils200 {
public static volatile int serialNum = 0;
public synchronized static int getNetSerialNum() {
return serialNum++;
}
}
正确示例2
import java.util.concurrent.atomic.AtomicLong;
/**
* atomic long
*/
public class SerialNumUtils300 {
public static AtomicLong serialNum = new AtomicLong();
public static long getNetSerialNum() {
return serialNum.getAndDecrement();
}
}
特殊示例
import java.util.concurrent.*;
public class StopThread {
private static boolean stopRequested;
public static void main(String[] args) throws InterruptedException {
Thread backgroundThread = new Thread(new Runnable() {
public void run() {
int i = 0;
while (!stopRequested) {
System.out.println(i);
i++;
}
/* 有些虚拟机优化成if(!stopRequest) while(true) i++; */
}
});
backgroundThread.start();
TimeUnit.SECONDS.sleep(1);
stopRequested = true;
}
}
分享到:
相关推荐
《Effective Java》第三版中文版目录 第一章 介绍 1 第二章 创建和销毁对象 4 1 考虑用静态工厂方法替换构造器 4 2 当遇到多个构造器参
15. 使类和成员的可访问性最小化 16. 在公有类中使用访问方法而非公有域 17.使可变性最小化:不可变类
Effective java 3 学习记录
Effective Java读书笔记.pdf
effective-java.pdf
Effective Java读书笔记,记载了大部分我觉的有用的东西,前半部分有代码说明,但后半部分的代码,太过琐碎,就没有整理
effective java 读书笔记,第二版自己摘要并翻译,以备速查。
【Effective Java】阅读笔记markdown 文件
Effective Java Effective Java Effective Java
《Effective Java》读书分享.pptx
effective-java 配套代码
effectiveJava的笔记
第67条:谨慎地进行优化有三条优化有关的格言是每个人都应该知道的:很多计算上的过失都被归咎于效率(没有达到必要的效率),而不是任何其他的原因 ,甚至包括盲目的做
Item 2: Consider a builder when faced with many constructor parameters Item 3: Enforce the singleton property with a private constructor or an enum type Item 4: Enforce noninstantiability with a ...
[Addison-Wesley] Effective Java 第2版 (英文版) [Addison-Wesley] Effective Java 2nd Edition (E-Book) ☆ 出版信息:☆ [作者信息] Joshua Bloch [出版机构] Addison-Wesley [出版日期] 2008年05月28日 ...
Effective-Java:Effective Java的所有练习程序
Effective Enterprise Java
java项目经验源码 Effective Java 作者: 实践《Effective Java》书中的经验法则示例代码,结合Java源码来理解这些最佳实践,并应用于实际项目。 Effective Java, Third Edition Updated for Java 9, Best practices...