package com.lee.thread;import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class TestThread { public static void main(String[] args) {

TestRunnable t = new TestRunnable();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
t2.start();
}
}class TestRunnable implements Runnable {

private int a = 0;

public void run() {
Lock lock = new ReentrantLock();
lock.lock();
//                synchronized (TestRunnable.class) {
try {
for (int i = 0;i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " ::" + a++);
// Thread.currentThread().yield();
}
} finally {
lock.unlock();
}

}

}
这个是我写的测试LOCK代码。但是并没有起到LOCK的作用。如果将上面LOCK用synchronized 替换,则会起到同步锁的效果。
我看JUC的文档,LOCK是可以替换synchronized的。请问到底是哪里错了!!!

解决方案 »

  1.   

    感觉是这里:
    Lock lock = new ReentrantLock();这样你每个线程都会new一个lock,起不到作用,改成static的试试:
    static Lock lock = new ReentrantLock();
      

  2.   

    synchronized有两种用法,一种是在方法定义时使用,多线程状态下,这个方法只能同时被同一个线程执行;另一种就是你问到的这种情况,用于锁定代码段,也就是说,{ }括号中的代码是不会同时被多个线程执行,而是排队执行。