JDK1.5的新特性--Lock

来源:互联网 发布:java tomcat 部署 编辑:程序博客网 时间:2024/06/11 21:59

JDK1.5中提供了多线程的升级解决方法.

将同步synchronized替换成显示Lock操作.

将Object中的wait,notify,notifyAll,替换了Condition对象中的await(),signal(),signalAll().

该对象可以通过Lock锁的newCondition()方法进行获取.(一个锁可以对应多个Condition对象)

通过该对象,就可唤醒指定的线程.

如下是个小示例:

class Print2 {
private Lock lock =new ReentrantLock();
private Condition c1 = lock.newCondition();
private Condition c2 = lock.newCondition();
private Condition c3 = lock.newCondition();

private int flag = 1;


public void print1() throws Exception {
lock.lock();
if(flag!=1)
c1.await();
for (int i = 1; i <= 3; i++)
System.out.println("A: " + i);
System.out.println();
flag = 2;
c2.signal();
lock.unlock();
}


public  void print2() throws Exception {
lock.lock();
if (flag != 2)
c2.await();
for (int i = 1; i <= 3; i++)
System.out.println("B: " + i);
System.out.println();
flag = 3;
c3.signal();
lock.unlock();
}


public void print3() throws Exception {
lock.lock();
if (flag != 3)
c3.await();
for (int i = 1; i <= 3; i++)
System.out.println("C: " + i);
System.out.println();
flag = 1;
c1.signal();
lock.unlock();
}
}

原创粉丝点击