synchronized和java.util.concurrent.locks.Lock的比较,描述正确的是()
第1题:
下列说法中错误的一项是
A.当线程需要在synchronized块中等待共享数据状态改变时,则需要调用wait()方法
B.当线程需要在synchronized块中等待共享数据状态改变时,则需要调用notify()方法
C.线程在synchronized块中执行完操作后,调用notify()方法通知正在等待的线程重新占有锁
D.wait()和notify()可以实现线程的同步操作
第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( )
第4题:
在多线程并发程序设计中,能够给对象x加锁的语句是( )。
A.X.wait
B.synchronized(x)
C.X.notify
D.x.synchronized
第5题:
在多线程并发程序设计中,能够给对象x加锁的语句是( )。
A.X.wait
B.synchronized(x)
C.X.notify
D.x.synchronized
第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()
第7题:
Which two of statements are true?()
第8题:
线程同步中,对象的锁在()情况下持有线程返回
第9题:
It is possible to synchronize static methods.
When a thread has yielded as a result of yield(), it releases its locks.
When a thread is sleeping as a result of sleep(), it releases its locks.
The Object.wait() method can be invoked only from a synchronized context.
The Thread.sleep() method can be invoked only from a synchronized context.
When the thread scheduler receives a notify() request, and notifies a thread, that thread immediately releases its lock.
第10题:
第11题:
Lock不能完成symchronized所实现的所有功能。
symchronized会自动释放锁。
Lock一定要求程序员手工释放,并且必须在finally中释放。
Lock比symchronized更精确的线程语义和更好的性能。
第12题:
declare reset() using the synchronized keyword
declare getName() using the synchronized keyword
declare getCount() using the synchronized keyword
declare the constructor using the synchronized keyword
declare increment() using the synchronized keyword
第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()
第14题:
下列各项说法中错误的是( )。
A.共享数据的所有访问都必须使用synchronized加锁
B.共享数据的访问不一定全部使用synchronized加锁
C.所有的对共享数据的访问都是临界区
D.临界区必须使用synchronized加锁
第15题:
下列各项说法中错误的是( )。
A.共享数据的所有访问都必须使用synchronized加锁
B.共享数据的访问不-定全部使用synchronized加锁
C.所有的对共享数据的访问都是临界区
D.临界区必须使用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
第17题:
( 32 )在多线程并发程序设计中,能够给对象 x 加锁的语句是
A ) x.wait( )
B ) synchronized(x)
C ) x.notify( )
D ) x.synchronized( )
第18题:
symchronized和java.util.concurrent.locks.Lock的比较,描述正确的是()
第19题:
请简述synchronized和J.ava.util.concurrent.locks.Lock的异同点
第20题:
Which three will compile and run without exception?()
第21题:
private synchronized Object o;
void go() {synchronized() { /* code here */ }
public synchronized void go() { /* code here */ }
private synchronized(this) void go() { /* code here */ }
void go() {synchronized(Object.class) { /* code here */ }
void go() {Object o = new Object();synchronized(o) { /* code here */ }
第22题:
当synchronized()语句块执行完后
当在synchronized()语句块执行中出现例外(exception)时
当持有锁的线程调用该对象的wait()方法时
以上都是
第23题:
Lock不能完成synchronized所实现的所有功能
synchronized会自动释放锁
Lock一定要求程序员手工释放,并且必须在finally从句中释放
Lock有比synchronized更精确的线程语义和更好的性能