Java核心内库-线程-线程同步-同步方法

本文介绍了Java中使用synchronized关键字实现同步方法的基本概念及其应用场景。通过一个简单的例子演示了如何利用同步方法解决多线程环境下资源竞争的问题,并讨论了同步方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同步方法:
使用synchronized修饰的方法,就叫做同步方法。保证A线程执行该方法的时候,其他线程只能在方法外等着。

synchronized public void doWork(){}

同步锁是谁:
对于非static方法,同步锁就是this
对于static方法,我们使用当前方法所在类的字节码对象(Apple2.class)

class Apple2 implements Runnable{
    private int num = 50; //苹果总数
    @Override
    public void run() {
        for (int i=0;i<50;i++){
           eat();
        }
    }

    synchronized private void eat(){
        if (num>0){
            System.out.println(Thread.currentThread().getName()+"吃了编号为"+num+"的苹果");
            try {
                Thread.sleep(10); // 此时是为了模拟网络延迟
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            num--;
        }
    }
}
public class Main {
    public static void main(String[] args){
        // 创建三个线程(同学)吃苹果
        Apple2 a = new Apple2();
        new Thread(a,"小A").start();
        new Thread(a,"小B").start();
        new Thread(a,"小C").start();
    }
}

synchronized的优劣
好处:保证了多线程并发访问时的同步操作,避免线程安全性问题。
缺点:使用synchronized的方法/代码块 的性能比不使用要低一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值