itgle.com

symchronized和java.util.concurrent.locks.Lock的比较,描述正确的是()A.Lock不能完成symchronized所实现的所有功能。B.symchronized会自动释放锁。C.Lock一定要求程序员手工释放,并且必须在finally中释放。D.Lock比symchronized更精确的线程语义和更好的性能。

题目
symchronized和java.util.concurrent.locks.Lock的比较,描述正确的是()

A.Lock不能完成symchronized所实现的所有功能。

B.symchronized会自动释放锁。

C.Lock一定要求程序员手工释放,并且必须在finally中释放。

D.Lock比symchronized更精确的线程语义和更好的性能。


相似考题
更多“symchronized和java.util.concurrent.locks.Lock的比较,描述正确的是() ”相关问题
  • 第1题:

    ( 29 )以下关于 NetWare 的描述中,正确的是

    A )文件和打印服务功能比较一般

    B )它是著名的开源操作系统

    C )具有良好的兼容性和系统容错能力

    D )产品推出比较晚


    正确答案:C

  • 第2题:

    以下关于NetWare的描述中,正确的是______。

    A.文件和打印服务功能比较一般

    B.它是著名的开源操作系统

    C.具有良好的兼容性和系统容错能力

    D.产品推出比较晚


    正确答案:C
    解析:NetWare具有良好的兼容性及系统容错能力。较高版本的NetWare,不仅能与不同类型的计算机兼容,而且还能在系统出错时及时进行自我修复,大大降低了因重要文件和数据丢失所带来的不必要的损失。

  • 第3题:

    贝雷迪提出的著名的“比较四步法”是指()

    A、描述、并置、解释、比较

    B、描述、比较、解释、并置

    C、描述、解释、并置、比较

    D、描述、并置、比较、解释


    参考答案:C

  • 第4题:

    贝雷迪提出的“比较四步法”是()

    A、描述、并置、解释、比较

    B、描述、比较、解释、并置

    C、描述、解释、并置、比较

    D、描述、并置、比较、解释


    参考答案:C

  • 第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();

    }

    }

    }

    }

    }