线程的同步

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();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值