Sección 6 Bloqueo de sincronización de bloqueo

Mostrar bloqueo Bloquear

⚫ Antes de Java 5.0, los únicos mecanismos disponibles para coordinar el acceso a los objetos compartidos eran sincronizados y volátiles. Se han agregado algunos mecanismos nuevos después de Java 5.0, pero no es un método para reemplazar el bloqueo integrado, sino una característica avanzada opcional cuando el bloqueo integrado no es aplicable.
⚫ ReentrantLock implementa la interfaz de bloqueo y proporciona la misma visibilidad de memoria y exclusión mutua que sincronizado. Pero en comparación con sincronizado, proporciona una mayor flexibilidad en el manejo de bloqueos.

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(); //释放锁
			}
		}
	}
	
}

Supongo que te gusta

Origin blog.csdn.net/m0_37294838/article/details/127683858
Recomendado
Clasificación