WHAT
线程是程序执行中的最小单元,依赖进程存在。线程的同步可以理解为该线程在未返回结果之前你处于阻塞状态。
WHY
在JAVA多线程并发中,当多个线程同时操作一个共享资源时,可能会发生资源数据的不准确,或者是数据的冲突,为了避免此类情况的发生,需要在一个线程操作该资源时,将该资源锁定,使得其他线程不可对此资源进行操作,以保证资源数据的准确性。
HOW
1.同步方法
使用synchronized关键字修饰的方法,如:
public synchronized void save(){}
2.同步代码块
使用synchronized关键字修饰的语句块,如:
synchronized(object){}
3.使用特殊域变量(volatile)
//需要同步的变量加上volatile
private volatile int account = 100;
4.使用重入锁
class Bank {
private int account = 100;
//需要声明这个锁
private Lock lock = new ReentrantLock();
public int getAccount() {
return account;
}
//这里不再需要synchronized
public void save(int money) {
lock.lock();
try{
account += money;
}finally{
lock.unlock();
}
}
}
5.使用ThreadLocal
public class Bank{
//使用ThreadLocal类管理共享变量account
private static ThreadLocal<Integer> account = new ThreadLocal<Integer>(){
@Override
protected Integer initialValue(){
return 100;
}
};
public void save(int money){
account.set(account.get()+money);
}
public int getAccount(){
return account.get();
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。