1.普通用法
public static void testlock() {
Lock lock = new ReentrantLock();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
lock.lock();
try {
Thread.sleep(1000);
System.out.println("goon");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
}
});
t.start();
System.out.println("start");
lock.lock();
System.out.println("over");
lock.unlock();
}start
goon
over2.trylock
public static void testtry() {
Lock lock = new ReentrantLock();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
lock.lock();
System.out.println("get");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
System.out.println("release");
}
}
});
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true) {
if (lock.tryLock()) {
System.out.println("get success");
lock.unlock();
break;
}else {
System.out.println("get faile ... ");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
});
t.start();
t1.start();
}get
get faile ...
get faile ...
get faile ...
get faile ...
get faile ...
get faile ...
get faile ...
get faile ...
get faile ...
release
get success
3.interruptlock
public static void testinterrupt() {
Lock lock = new ReentrantLock();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
lock.lock();
try {
Thread.sleep(10000);
System.out.println("goon ...");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
}
});
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
lock.lockInterruptibly();
System.out.println("get ...");
lock.unlock();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
//e1.printStackTrace();
System.out.println("interrupt ... ");
}
}
});
t.start();
t1.start();
try {
Thread.sleep(5000);
}catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("to interrupt ");
t1.interrupt();
}to interrupt
interrupt ...
goon ...
4.delay
public static void testdelay() {
Lock lock = new ReentrantLock();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
lock.lock();
try {
Thread.sleep(10000);
System.out.println("goon ...");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
}
});
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
if(lock.tryLock(5, TimeUnit.SECONDS)) {
System.out.println("get ...");
lock.unlock();
}else {
System.out.println("have not get ...");
}
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
//e1.printStackTrace();
System.out.println("interrupt ... ");
}
}
});
t.start();
t1.start();
}have not get ...
goon ...
版权声明:本文为caideb原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。