Section 6 Verrou de synchronisation de verrouillage

Afficher le verrou Verrouiller

⚫ Avant Java 5.0, les seuls mécanismes disponibles pour coordonner l'accès aux objets partagés étaient synchronisés et volatils. Certains nouveaux mécanismes ont été ajoutés après Java 5.0, mais ce n'est pas une méthode pour remplacer le verrou intégré, mais une fonctionnalité avancée facultative lorsque le verrou intégré n'est pas applicable.
⚫ ReentrantLock implémente l'interface de verrouillage et fournit la même exclusion mutuelle et la même visibilité de la mémoire que synchronisé. Mais par rapport à la synchronisation, il offre une plus grande flexibilité dans la gestion des serrures.

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/*
 * 一、用于解决多线程安全问题的方式:
 * 
 * synchronized:隐式锁
 * 1. 同步代码块
 * 
 * 2. 同步方法
 * 
 * jdk 1.5 后:
 * 3. 同步锁 Lock
 * 注意:是一个显示锁,需要通过 lock() 方法上锁,必须通过 unlock() 方法进行释放锁
 */
public class TestLock {
    
    
	
	public static void main(String[] args) {
    
    
		Ticket ticket = new Ticket();
		
		new Thread(ticket, "1号窗口").start();
		new Thread(ticket, "2号窗口").start();
		new Thread(ticket, "3号窗口").start();
	}

}

class Ticket implements Runnable{
    
    
	
	private int tick = 100;
	
	private Lock lock = new ReentrantLock();

	@Override
	public void run() {
    
    
		while(true){
    
    
			
			lock.lock(); //上锁
			
			try{
    
    
				if(tick > 0){
    
    
					try {
    
    
						Thread.sleep(200);
					} catch (InterruptedException e) {
    
    
					}
					
					System.out.println(Thread.currentThread().getName() + " 完成售票,余票为:" + --tick);
				}
			}finally{
    
    
				lock.unlock(); //释放锁
			}
		}
	}
	
}

Je suppose que tu aimes

Origine blog.csdn.net/m0_37294838/article/details/127683858
conseillé
Classement