java线程---线程锁synchronized和Lock

本文探讨了线程锁在Java并发编程中的重要性,解释了synchronized和Lock的区别。通过示例展示了未加锁时可能出现的数据错误,然后详细解释了synchronized如何锁定代码块和方法以确保线程安全,以及Lock接口的使用,强调了手动解锁的必要性。
摘要由CSDN通过智能技术生成

什么是线程锁

多线程可以同时执行多个任务,但是当多个线程同时访问同一个数据时,可能导致数据不同步,甚至错误!
打个比方,你在银行里面存了一百万,这个时候你需要从里面取走九十万,你女朋友也要从里面取五十万,如果没有用线程锁,那么你们两个人同时取钱,就有可能导致线程错误,你们总共从银行取走一百四十万元,那么银行就会亏本,所以要用线程锁。

synchronized和Lock的区别

线程锁分synchronized和Lock,那么他们之间有什么区别呢?

区别 synchronized Lock
锁的释放 自动释放 必须在finally中释放,不然可能线程锁死
锁的状态 无法判断 可以判断
存在层次 java的关键字 一个类
性能 少量同步 多量同步
范围 不但可以锁代码块,他还可以方法 只有代码块

首先我们先不加锁写一个程序

package Thread;
public class mytest03 {
   
    public static void main(String[] args) {
   
        Money money=new Money(300);
        new Thread(money,"t1").start();
        new Thread(money,"t2").start();
    }
}
class Money implements Runnable
{
   
    int count;
    public Money(int count) {
   
        this.count = count;
    }

    @Override
    public  void run() {
   
        while (true)
        {
   
                if(count<=0)
                    break;
                else
                {
   
                    System.out.println(Thread.currentThread().getName()+"取出了1万元,----->还剩"+(count-1)+"万元");
                    count=count-1;
                    try 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_BinBin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值