A.Lock不能完成symchronized所实现的所有功能。
B.symchronized会自动释放锁。
C.Lock一定要求程序员手工释放,并且必须在finally中释放。
D.Lock比symchronized更精确的线程语义和更好的性能。
第1题:
( 29 )以下关于 NetWare 的描述中,正确的是
A )文件和打印服务功能比较一般
B )它是著名的开源操作系统
C )具有良好的兼容性和系统容错能力
D )产品推出比较晚
第2题:
以下关于NetWare的描述中,正确的是______。
A.文件和打印服务功能比较一般
B.它是著名的开源操作系统
C.具有良好的兼容性和系统容错能力
D.产品推出比较晚
第3题:
贝雷迪提出的著名的“比较四步法”是指()
A、描述、并置、解释、比较
B、描述、比较、解释、并置
C、描述、解释、并置、比较
D、描述、并置、比较、解释
第4题:
贝雷迪提出的“比较四步法”是()
A、描述、并置、解释、比较
B、描述、比较、解释、并置
C、描述、解释、并置、比较
D、描述、并置、比较、解释
第5题:
简述synchronized 和java.util.concurrent.locks.Lock的
异同?
主要相同点:Lock 能完成synchronized 所实现的所有功能
主要不同点:Lock 有比synchronized 更精确的线程语义和更好的性能。synchronized 会
自动释放锁,而Lock 一定要求程序员手工释放,并且必须在finally 从句中释放。Lock
还有更强大的功能,例如,它的tryLock 方法可以非阻塞方式去拿锁。
举例说明(对下面的题用lock 进行了改写):
package com.huawei.interview;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadTest {
/**
* @param args
*/
private int j;
private Lock lock = new ReentrantLock();
public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadTest tt = new ThreadTest();
for(int i=0;i<2;i++)
{
new Thread(tt.new adder()).start();
new Thread(tt.new subtractor()).start();
}
}
private class subtractor implements Runnable
{
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
/*synchronized (ThreadTest.this) {
System.out.println("j--=" + j--);
//这里抛异常了,锁能释放吗?
}*/
lock.lock();
try
{
System.out.println("j--=" + j--);
}finally
{
lock.unlock();
}
}
}
}
private class adder implements Runnable
{
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
/*synchronized (ThreadTest.this) {
System.out.println("j++=" + j++);
}*/
lock.lock();
try
{
System.out.println("j++=" + j++);
}finally
{
lock.unlock();
}
}
}
}
}