1.JDK1.5新特性—Lock接口
Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。替代了sychronized。
其中有两个重要的方法,帮助我们完成上锁和释放锁。
(1) void lock()
获取锁。
(2) void unlock()
释放锁。
接口都需要实现类来实现接口,这里已知了一个Lock接口的实现类ReentrantLock,所以接下来演示一下如何利用Lock接口实现保护线程的安全。
package cn.itcast.demo03;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/*
* 采用Lock接口
*/
public class Tickets implements Runnable {
// 定义可以出售的票源
private int ticket = 100;
// 创建Lock接口的实现类ReentranLock
private Lock l = new ReentrantLock();
public void run() {
while (true) {
// 获取锁
l.lock();
try {
Thread.sleep(100L);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + "出售第"
+ (ticket--));
}
//用完释放锁
l.unlock();
}
}
}
package cn.itcast.demo03;
/*
* 并发访问同一个共享数据
*/
public class ThreadDemo {
public static void main(String[] args) {
Runnable r = new Tickets();
Thread t0 = new Thread(r);
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t0.start();
t1.start();
t2.start();
}
}
这个比同步代码块好记点吧可能…