javaSE Lock接口,多线程安全,lock(),unlock()


Demo.java:

package cn.xxx.demo;
/*
 * 多线程并发访问同一个数据资源
 * 3个线程,对一个票资源,出售
 */
public class Demo {
	public static void main(String[] args) {
		//创建Runnable接口实现类对象
		Tickets t = new Tickets();
		//创建3个Thread类对象,传递Runnable接口实现类
		Thread t0 = new Thread(t);
		Thread t1 = new Thread(t);
		Thread t2 = new Thread(t);
		
		t0.start();t1.start();t2.start();
		
	}
}
Tickets.java(线程类,实现Runnable接口,重写run方法):
package cn.xxx.demo;

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

/*
 *  使用JDK1.5 的接口Lock,替换synchronized同步,实现线程的安全性
 *  Lock接口方法:
 *     lock() 获取锁
 *     unlock()释放锁
 *  直接已知实现类ReentrantLock
 */
public class Tickets implements Runnable{  // 实现Runnable接口
	private int ticket = 100;
	//在类的成员变量位置,创建Lock接口的实现类对象。 成员变量位置,所有线程可以共享该锁
	private Lock lock = new ReentrantLock();
	
	public void run(){   // 重写run方法
		while(true){
		    lock.lock();  //调用Lock接口方法lock获取锁
			if( ticket > 0){
				try{
				   Thread.sleep(10);
				   System.out.println(Thread.currentThread().getName()+" 出售第 "+ticket--);
				}catch(Exception ex){
					
				}finally{
					lock.unlock();  //释放锁,调用Lock接口方法unlock
				}
			}
		}
	}
}


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/80736900