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的。请问到底是哪里错了!!!
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的。请问到底是哪里错了!!!
Lock lock = new ReentrantLock();这样你每个线程都会new一个lock,起不到作用,改成static的试试:
static Lock lock = new ReentrantLock();