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

题目

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

  • A、Lock不能完成synchronized所实现的所有功能
  • B、synchronized会自动释放锁
  • C、Lock一定要求程序员手工释放,并且必须在finally从句中释放
  • D、Lock有比synchronized更精确的线程语义和更好的性能

相似考题
更多“synchronized和java.util.concurrent.locks.Lock的比较,描述正确的是()    A、Lock不能完成synchronized所实现的所有功能B、synchronized会自动释放锁C、Lock一定要求程序员手工释放,并且必须在finally从句中释放D、Lock有比synchronized更精确的线程语义和更好的性能”相关问题
  • 第1题:

    下列说法中错误的一项是

    A.当线程需要在synchronized块中等待共享数据状态改变时,则需要调用wait()方法

    B.当线程需要在synchronized块中等待共享数据状态改变时,则需要调用notify()方法

    C.线程在synchronized块中执行完操作后,调用notify()方法通知正在等待的线程重新占有锁

    D.wait()和notify()可以实现线程的同步操作


    正确答案:B
    解析:本题考查线程间交互的概念。当线程进入synchronized块后,共享数据的状态并不一定满足该线程的需要,它要等待其他线程将共享数据改变为所需要的状态后才能继续执行,但由于此时它占有了该对象的锁,其他线程无法对共享数据进行操作,此时线程调用wait()方法进入等待状态,并且暂时释放共享数据的对象锁,其他线程可以获得该对象锁,进入synchronized块进行操作,操作完成之后,再调用notify()方法通知等待的线程重新占有锁,这样就实现了线程的同步操作。由此可见,wait()方法是线程需要在 synchronized块中等待共享数据状态改变时调用,而notify()方法是线程在synchronized块中执行完操作后调用,用来通知正在等待的线程重新占有锁,选项B的说法错误。

  • 第2题:

    简述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();

    }

    }

    }

    }

    }

  • 第3题:

    为了支持压栈线程与弹栈线程之间的交互与同步,在程序的下画线处依次填入的语句是( )。

    A.synchronized( )

    B. notify( )

    C.synchronized this.wait( )

    D.svnchronized this.notify( )

    E.Serializable sleep( )


    正确答案:B
    在Synchronized块中等待共享数据的状态改变时调用wait()方法,这样该线程等待并暂时释放共享数据对象的锁。

  • 第4题:

    在多线程并发程序设计中,能够给对象x加锁的语句是( )。

    A.X.wait

    B.synchronized(x)

    C.X.notify

    D.x.synchronized


    正确答案:B
    B。【解析】Java平台将每一个由synchronized(object)语句指定的对象设置一个锁,称为对象锁,是一种独占的排他锁。

  • 第5题:

    在多线程并发程序设计中,能够给对象x加锁的语句是( )。 A.X.waitB.synchronized(x)S

    在多线程并发程序设计中,能够给对象x加锁的语句是( )。

    A.X.wait

    B.synchronized(x)

    C.X.notify

    D.x.synchronized


    正确答案:B
    B。【解析】Java平台将每一个由synchronized(object)语句指定的对象设置一个锁,称为对象锁,是一种独占的排他锁。

  • 第6题:

    ( 31 ) 为了支持压栈线程与弹栈线程之间的交互与同步 , 在程序的下划线处依次填入的语句是

    public class IntStack{

    private int idx=0;

    private int[] data=new int[8];

    public void push(int i){

    data[idx]=i;

    idx++;

    }

    __________

    ......

    }

    A ) synchronized()

    notify()

    B ) synchronized()

    this.wait()

    C ) synchronized()

    this.notify()

    D ) synchronized()

    sleep()


    正确答案:B

  • 第7题:

    Which two of statements are true?()

    • A、It is possible to synchronize static methods.
    • B、When a thread has yielded as a result of yield(), it releases its locks.
    • C、When a thread is sleeping as a result of sleep(), it releases its locks.
    • D、The Object.wait() method can be invoked only from a synchronized context.
    • E、The Thread.sleep() method can be invoked only from a synchronized context.
    • F、When the thread scheduler receives a notify() request, and notifies a thread, that thread immediately releases its lock.

    正确答案:A,D

  • 第8题:

    线程同步中,对象的锁在()情况下持有线程返回

    • A、 当synchronized()语句块执行完后
    • B、 当在synchronized()语句块执行中出现例外(exception)时
    • C、 当持有锁的线程调用该对象的wait()方法时
    • D、 以上都是

    正确答案:D

  • 第9题:

    多选题
    Which two of statements are true?()
    A

    It is possible to synchronize static methods.

    B

    When a thread has yielded as a result of yield(), it releases its locks.

    C

    When a thread is sleeping as a result of sleep(), it releases its locks.

    D

    The Object.wait() method can be invoked only from a synchronized context.

    E

    The Thread.sleep() method can be invoked only from a synchronized context.

    F

    When the thread scheduler receives a notify() request, and notifies a thread, that thread immediately releases its lock.


    正确答案: F,A
    解析: 暂无解析

  • 第10题:

    问答题
    请简述synchronized和J.ava.util.concurrent.locks.Lock的异同点

    正确答案: 相同点:Lock 能完成 synchronized 所实现的所有功能;
    主要不同点:Lock 有比 synchronized 更精确的线程语义和更好的性能。
    S.ynchronized 会自动释放锁,而 Lock 一定要求程序员手工释放,并且必须在 finally 从句中释放
    解析: 暂无解析

  • 第11题:

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

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

    B

    symchronized会自动释放锁。

    C

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

    D

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


    正确答案: B,C
    解析: 暂无解析

  • 第12题:

    多选题
    Which three changes should be made to adapt this class to be used safely by multiple threads?()
    A

    declare reset() using the synchronized keyword

    B

    declare getName() using the synchronized keyword

    C

    declare getCount() using the synchronized keyword

    D

    declare the constructor using the synchronized keyword

    E

    declare increment() using the synchronized keyword


    正确答案: B,D
    解析: 暂无解析

  • 第13题:

    为了支持压栈线程与弹栈线程之间的交互与同步,在下画线处依次填入的语句是 public class IntStack { private int idx=0; private int[]data=new int[8]; public ______ void push(int i) { data[idx]=i; idx++; ______ } … }

    A.synchronized() notify()

    B.synchronized() this.wait()

    C.synchronized() this.notify()

    D.synchronized() sleep()


    正确答案:C
    解析:一个程序中单独的、并发的线程对同一个对象进行访问的代码段,称为临界区。在Java语言中,临界区可以是一个语句块或是一个方法,并且用synchronized关键字标识。本程序中push()方法即为临界区,所以需要用synchronized关键字标识。this.notify()把当前堆栈对象的wait pool中的一个线程释放到lock pool,等待该堆栈的锁以便运行。

  • 第14题:

    下列各项说法中错误的是( )。

    A.共享数据的所有访问都必须使用synchronized加锁

    B.共享数据的访问不一定全部使用synchronized加锁

    C.所有的对共享数据的访问都是临界区

    D.临界区必须使用synchronized加锁


    正确答案:B
    B【解析】共享数据的所有访问一定要作为临界区,用synchronized标识,这样保证了所有的对共享数据的操作都通过对象锁的机制进行控制。

  • 第15题:

    下列各项说法中错误的是( )。

    A.共享数据的所有访问都必须使用synchronized加锁

    B.共享数据的访问不-定全部使用synchronized加锁

    C.所有的对共享数据的访问都是临界区

    D.临界区必须使用synchronized加锁


    正确答案:B
    共享数据的所有访问-定要作为临界区,用synchronized标识,这样保证了所有的对共享数据的操作都通过对象锁的机制进行控制。

  • 第16题:

    为了支持压栈线程与弹栈线程之间的交互与同步,在程序的下画线处依次填入的语句是( )。 public class IntStack{ private int idx=0; private int[]data=new int[8]; public void push(int i){ data[idx]=i: idx++; … … }

    A.synchronized notify

    B.synchronized this.wait

    C.synchronized this.notify

    D.Serializable sleep


    正确答案:B
    B。【解析】在Synchronized块中等待共享数据的状态改变时调用wait方法,这样该线程等待并暂时释放共享数据对象的锁。

  • 第17题:

    ( 32 )在多线程并发程序设计中,能够给对象 x 加锁的语句是

    A ) x.wait( )

    B ) synchronized(x)

    C ) x.notify( )

    D ) x.synchronized( )


    正确答案:B

  • 第18题:

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

    • A、Lock不能完成symchronized所实现的所有功能。
    • B、symchronized会自动释放锁。
    • C、Lock一定要求程序员手工释放,并且必须在finally中释放。
    • D、Lock比symchronized更精确的线程语义和更好的性能。

    正确答案:B,C,D

  • 第19题:

    请简述synchronized和J.ava.util.concurrent.locks.Lock的异同点


    正确答案: 相同点:Lock 能完成 synchronized 所实现的所有功能;
    主要不同点:Lock 有比 synchronized 更精确的线程语义和更好的性能。
    S.ynchronized 会自动释放锁,而 Lock 一定要求程序员手工释放,并且必须在 finally 从句中释放

  • 第20题:

    Which three will compile and run without exception?()

    • A、private synchronized Object o;
    • B、void go(){   synchronized(){/* code here */}
    • C、public synchronized void go(){/* code here */}
    • D、private synchronized(this) void go(){/* code here */}
    • E、void go(){   synchronized(Object.class){/* code here */}
    • F、void go(){   Object o = new Object();   synchronized(o){/* code here */}

    正确答案:C,E,F

  • 第21题:

    多选题
    Which three will compile and run without exception?()
    A

    private synchronized Object o;

    B

    void go() {synchronized() { /* code here */ }

    C

    public synchronized void go() { /* code here */ }

    D

    private synchronized(this) void go() { /* code here */ }

    E

    void go() {synchronized(Object.class) { /* code here */ }

    F

    void go() {Object o = new Object();synchronized(o) { /* code here */ }


    正确答案: B,D
    解析: 暂无解析

  • 第22题:

    单选题
    线程同步中,对象的锁在()情况下持有线程返回
    A

     当synchronized()语句块执行完后

    B

     当在synchronized()语句块执行中出现例外(exception)时

    C

     当持有锁的线程调用该对象的wait()方法时

    D

     以上都是


    正确答案: C
    解析: 暂无解析

  • 第23题:

    多选题
    synchronized和java.util.concurrent.locks.Lock的比较,描述正确的是()
    A

    Lock不能完成synchronized所实现的所有功能

    B

    synchronized会自动释放锁

    C

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

    D

    Lock有比synchronized更精确的线程语义和更好的性能


    正确答案: C,B
    解析: 暂无解析