-
synchronized:是 Java 中的关键字,用于实现同步访问共享资源。当一个线程获得了对象的锁(也称为监视器锁)时,其他试图获取该锁的线程将被阻塞,直到该线程释放锁为止。synchronized 可以用于修饰方法或代码块,以确保在同一时刻只有一个线程能够执行被修饰的代码区域,从而保证了线程的安全性。
-
ReentrantLock:是 Java 中的一个类,用于实现显示锁(也称为互斥锁)。与 synchronized 相比,ReentrantLock 提供了更灵活的锁定机制,可以实现可重入、定时、可中断、公平和非公平等特性。使用 ReentrantLock 可以更精确地控制锁的获取和释放,并且提供了更多的扩展功能。
-
Volatile:是 Java 中的关键字,用于修饰变量,用于确保变量的可见性。当一个变量被 volatile 修饰时,对该变量的写操作会立即被其他线程可见,保证了多个线程之间对该变量的可见性。Volatile 关键字通常用于标记一些状态标志位或者计数器等,它的作用是告诉编译器不要对这个变量进行缓存优化,每次都直接从主存中读取该变量的值。
这些机制和关键字的存在是为了确保多线程并发执行时的正确性和稳定性。由于多线程环境下的竞态条件、内存可见性问题和线程安全性问题会导致程序的不确定性和错误,因此需要通过这些机制来保证多线程程序的正确性。不同的场景和需求可能会选择不同的机制来解决并发问题,以满足程序的性能和可维护性要求。