Java线程同步Synchronized

在Java中,可以使用synchronized关键字实现线程同步。synchronized关键字可以用来修饰方法或代码块,保证在同一时间内只有一个线程可以执行被synchronized关键字修饰的代码。

当一个方法被synchronized修饰时,该方法称为同步方法。同一时间内只有一个线程可以访问该方法,其他线程需要等待直到锁被释放才能继续执行。

示例代码如下:

java 复制代码
public class SynchronizedExample {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public static void main(String[] args) throws InterruptedException {
        SynchronizedExample example = new SynchronizedExample();

        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                example.increment();
            }
        });

        thread1.start();
        thread2.start();

        thread1.join();
        thread2.join();

        System.out.println("Count: " + example.count);
    }
}

在上面的示例中,使用synchronized修饰了increment方法。两个线程分别调用increment方法1000次,最终输出的count值应该是2000。

需要注意的是,synchronized关键字只能保证同一时间内只有一个线程执行被修饰的代码逻辑,但并不能保证执行顺序。如果两个线程没有竞争资源,它们可能会并行执行。如果需要保证执行顺序,可以使用Lock或信号量等其他同步机制。

相关推荐
哎呦没几秒前
Spring Boot与林业产品推荐系统的融合
java·spring boot·后端
gorgor在码农2 分钟前
redis 底层数据结构
java·数据库·redis
Erosion202010 分钟前
JAVA WEB和Tomcat各组件概念
java·tomcat
G丶AEOM12 分钟前
JVM中TLAB(线程本地分配缓存区)是什么
java·jvm
《源码好优多》16 分钟前
基于Java Springboot华为数码商城交易平台
java·开发语言·spring boot
康熙38bdc37 分钟前
Linux 线程互斥
linux·运维·开发语言
Mr__vantasy44 分钟前
数据结构(初阶7)---七大排序法(堆排序,快速排序,归并排序,希尔排序,冒泡排序,选择排序,插入排序)(详解)
c语言·开发语言·数据结构·算法·排序算法
♡喜欢做梦1 小时前
【Java】二叉树:数据海洋中灯塔式结构探秘(下:基本操作)
java·数据结构·算法
机器视觉知识推荐、就业指导1 小时前
基于Qt实现的自定义树结构容器:设计与应用
开发语言·qt
qing_0406031 小时前
C++——多态(下)
开发语言·c++