单选题在堆栈类SharedStack的定义中,为了保证堆栈在并发操作中数据的正确性,应在下划线处填入的修饰符是(  )。(两个下划线的填写内容相同)public class SharedStack { ______ int idx = 0; ______ char[] data = new char[10]; public synchronized void push(char c){……} public synchronized void pop(){……}}A publicB 不使用修饰符C priv

题目
单选题
在堆栈类SharedStack的定义中,为了保证堆栈在并发操作中数据的正确性,应在下划线处填入的修饰符是(  )。(两个下划线的填写内容相同)public class SharedStack { ______ int idx = 0; ______ char[] data = new char[10]; public synchronized void push(char c){……} public synchronized void pop(){……}}
A

public

B

不使用修饰符

C

private

D

protected


相似考题

1.请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程包含有一个源程序文件proj2.cpp,其中定义了Stack类和ArrayStack类。 Stack是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack为抽象类,它只定义了栈的用户接口,如下所示: 公有成员函数 功能 push 入栈:在栈顶位置添加一个元素 pop 退栈:取出并返回栈顶元素 ArrayStack是Stack的派生类,它实现了Stack定义的接口。ArrayStack内部使用动态分配的字符数组作为栈元素的存储空间。数据成员maxSize表示的是栈的最大容量,top用于记录栈顶的位置。成员函数push和pop分别实现具体的入栈和退栈操作。 请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为: a,b,C C,b,a 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****料found****”。 //proj2.cpp include<iostream> using namespacc std; class Stack{ public: virtual void push(char C)=0; virtual char pop=0; };class ArrayStack:public Stack{ char*P; int maxSizc; int top; public: ArravStack(int s) { top=0; maxSize=s: //*********found********* P=______; } ~ArrayStack { //*********found********* _______; } void push(char c) } if(top==maxSize){ cerr<<”Overflow! \n”: return; } //*********found********* _______; top++: } char pop { if(top==0){ cerr<<”Underflow!、n”; return‘\0’; } Top--; //*********found********* ______; } }; void f(Stack&sRef) { char ch[]={‘a’,‘b’,‘c’}; cout<<ch[0]<<”,”<<ch[1]<<”,”<<ch[2]<<endl; sRef.push(oh[0]);sRef.push(ch[1]);sRef.push(ch[2]); cout<<sRef.poP<<”,”; cout<<sRef.poP<<”,”; cout<<sRef.poP<<endl; } int main { ArrayStack as(10); f(as): return 0: }

参考答案和解析
正确答案: B
解析:
并发性在一定意义上可以理解为并行,即是为了保证多个线程能够进行同时放访问。因此需要保证多个线程都对其拥有访问权限。在Java语言中,其修饰符的权限如下:①public:被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。②private:被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。③protect:被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。④不使用修饰符:只允许在同一个包中进行访问。而多线程的安全性不是由这些修饰符决定的,而是由synchronized、volatile等关键字来保证。所以答案选择A。
更多“单选题在堆栈类SharedStack的定义中,为了保证堆栈在并发操作中数据的正确性,应在下划线处填入的修饰符是(  )。(两个下划线的填写内容相同)public class SharedStack { ______ int idx = 0; ______ char[] data = new char[10]; public synchronized void push(char c){……} public synchronized void pop(){……}}A publicB 不使用修饰符C priv”相关问题
  • 第1题:

    ( 12 )请将下面的程序补充完整,使得程序输出 “ 飘是张娜的书 ” 。

    #include <iostream>

    using namespace std;

    class Book{

    public:

    Book(char *str) {strcpy(title,str);}

    【 12 】 void PrintInfo() {cout<<title<<endl;}

    protected:

    char title[50];

    };

    class MyBook:public Book{

    public:

    MyBook(char *s1,char *s2= " 张娜 " ):

    【 13 】 {strcpy(owner,s2);}

    virtual void PrintInfo() {cout<<title<< " 是 " owner<< " 的书 " <<endl;}

    private:

    char owner[10];

    };

    int main(){

    Book *prt=new MyBook( " 飘 " );

    prt->PrintInfo();

    return 0;

    }


    正确答案:

                                               13.答案暂缺

  • 第2题:

    如下程序的输出结果是______。 include using namespace std; class Pet{ char nam

    如下程序的输出结果是______。

    include<iostream>

    using namespace std;

    class Pet{

    char name[10];

    public:

    Pet(char*nanle){strcpy(this->name,name);}

    const char*getName( )const{return name;}

    virtual void call( )eonst=0;

    };

    class Dog:public Pet{

    public:

    Dog(char*name):Pet(name){ }

    void call( )eonst{cout<<"汪汪叫";}

    };

    class Cat:public Pet{

    public:

    Cat(char*name):Pet(name){ }

    void call( )const{eout<<"喵喵叫";}

    };

    int main( ){

    Pet*petl=new Dog("哈克"),*pet2=new Cat("吉米");

    eout<<petl->getName( );petl->call( );eout<<endl;

    cout<<pet2->getName( );pet2->call( );eout<<endl;

    return 0;

    }


    正确答案:哈克汪汪叫 吉米喵喵叫
    哈克汪汪叫 吉米喵喵叫

  • 第3题:

    本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。

    注意:不改变程序的结构,不得增行或删行。

    class DataPool

    {

    private int data;

    private boolean isFull;

    public DataPool()

    {

    isFull=false;

    }

    public synchronized void putData(int d)

    {

    if(isFull= =true)

    {

    try

    {

    this.notify();

    }

    catch(InterruptedException e)

    {}

    }

    data=d;

    isFull=true;

    System.out.println("生产了一个数据:"+data);

    this.notify();

    }

    public synchronized int getData()

    {

    if(isFull= =false)

    {

    try

    {

    this.wait();

    }

    catch(InterruptedException e)

    {}

    }

    isFull=false;

    System.out.println("消费了一个数据"+data);

    this.wait();

    return this.data;

    }

    boolean getIsFull()

    {

    return isFull;

    }

    }

    class Producer extends Thread

    {

    DataPool pool;

    public Producer(DataPool pool)

    {

    this.pool=pool;

    }

    public void run()

    {

    for(int i=0; i<10; i++)

    {

    int data=(int) (Math.random()*1000);

    try

    {//用于生产数据

    sleep(data);

    }

    catch(InterruptedException e)

    {}

    pool.putData(data);

    }

    }

    }

    class Consumer implements Runnable

    {

    DataPool pool;

    public Consumer(DataPool pool)

    {

    this.pool=pool;

    }

    public void run()

    {

    for(int i=0; i<10; i++)

    {

    int data=pool.getData();

    try

    {//用于处理数据

    sleep((int) (Math.random()*1000));

    }

    catch(InterruptedException e)

    {}

    }

    }

    }

    public class advance

    }

    public static void main(String[] args)

    {

    Data Pool pool=new Data Pool();

    Producer pro=new Producer(pool);

    Runnable con=new Consumer(pool);

    Thread conTh=new Thread(con);

    &n


    正确答案:this.wait() this.notify() thread.sleep((int)(Math.random()*1000))
    this.wait() this.notify() thread.sleep((int)(Math.random()*1000)) 解析:本题考查知识点:多线程同步与互斥、线程的概念和实现方法。解题思路:Data Pool是一个用来存放数据的缓冲池,其中可以存放一个血型数据,变量isFull作为标志量,标志该缓冲池中是否有数据。Put Data()方法负责向Data Pool中存放数据,本方法调用成功,缓冲池中就存入了数据,getData()方法负责从DataPool中获得数据,本方法调用成功,缓冲池就为空。Producer类负责产生随机数据,然后将数据存放到DataPool中。Consumer类负责才能够从DataPool中取出数据。Producer和Consumer共享同一个Data Pool对象。当某个线程进入synchronized块后,共享的数据并不一定能满足该线程的需要,这样线程就需要等待其他线程修改共享数据,直到满足需要以后才继续执行,但是当前线程必须释放锁以使得其他线程可以运行。wait()和notify()方法是实现线程之间通信的两个方法。wait()用来释放线程拥有的锁,使线程进入等待队列;notify()用来唤醒等待队列中的线程,并把它加入到申请锁的队列。本题中生产者在DataPool有数据的情况下需要进入等待消费者取出数据,所以需要调用wait()方法,因此第1个下划线的地方应该改为this.wait()。消费者线程在取出数据以后,必须通知生产者线程DataPool中已经没有数据了,因此第2个下划线的地方改为this.notify()。第3个下划线的地方,考查常用的线程类的使用。Runnable接口的目的是使任何类都可以为线程提供线程体,但它本身并不是线程,所以并不能直接调用Thread类的方法,需要改为 thread.sleep。

  • 第4题:

    阅读下面一个支持多线程并发操作的堆栈类代码 public class MyStack { private int idx=0; private int[] data=new int[8]; public ______ Void push(int i) { data[idx]=i; idx++; } … } 在下画线处应填入的是

    A.synchronized

    B.wait

    C.blocked

    D.interrupt


    正确答案:A
    解析:一个程序中单独的、并发的线程对同一个对象进行访问的代码段,称为临界区。在Java语言中,临界区可以是一个语句块或是一个方法,并且用synchronized关键字标识。本程序中push()方法即为临界区,所以需要用synchronized关键字标识。

  • 第5题:

    阅读下面实现堆栈类并发控制的部分代码 public class DataStack{ private int idx=0; private int[]data=new int[8]; public void push(int i){ . ________________{ data[idx]=i; idx + +; } } } …… } 在程序下画线处填入正确选项是

    A.synchronized

    B.synchronized(this)

    C.synchronized()

    D.synchronized(idx)


    正确答案:B
    解析:synchronized关键字用于同步方法,而在同步一个代码块时,用度synchronized(this)来实现。

  • 第6题:

    以下程序运行后的输出结果是______。includeinclude usingnamespacestd;classY

    以下程序运行后的输出结果是______。

    include <iostream>

    include <string>

    using namespace std;

    class Y;

    class X

    {

    int x;

    char *strx;

    public:

    X(int a, char *str)

    {

    x=a;

    strx=new char[strlen(str)+1]

    strcpy (strx,str);

    }

    void show(Y &ob);

    };

    class Y

    {

    prlvate:

    int y;

    char *stry;

    public:

    Y(int b,char *str)

    {

    y=b;

    stry=new char[strlen(str)+1];

    strcpy(stry,str);

    }

    friend void X::show(Y &ob);

    };

    void X::show{Y &ob)

    {

    cout<<strx<<",",

    cout<<ob.stry<<endl;

    }

    int main{

    {

    X a (10, "stringX");

    Y b (20, "stringY");

    a. show (b);

    renurn 0;

    }


    正确答案:stringX stringY
    stringX stringY 解析:本题考核友元函数的应用。该程序中,类X的成员函数show()在类Y中说明为类Y的友元函数,因此,在该友元成员show()中可以访问类Y的私有成员stry.成员函数show()的功能就是输出类X的私有成员strx和 Y对象ob的私有成员stry。主函数main()中定义了 X类的一个对象a和Y类的一个对象b,并且都进行了初始化.然后调用对象a的成员函数show,输出对象a中私有成员strx中的内容和对象b中私有成员stry中的内容,即字符串stringX和stringY。

  • 第7题:

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

    A.this.notify

    B.interrupt

    C.this.wait

    D.sleep


    正确答案:A
    A。【解析】当一个线程使用的同步方法中用到某个变量,而且需要其他线程修改此变量后才能复合本线程的需要,那么可以使用wait方法。wait方法的作用是使本线程等待,并允许其他线程使用此同步方法。当其他线程使用完后应使用notify或者notifyAll方法允许其他线程使用此同步方法。Interrupt方法的作用是在run方法执行完之前就消灭此线程,而sleep方法的作用是延迟一段时间后执行。因为本题是为了支持压栈线程与弹栈线程之间的交互与同步,所以选A。

  • 第8题:

    为了支持压栈线程与弹栈线程之间的交互与同步,在程序的下画线处依次填入的语句是( )。 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方法,这样该线程等待并暂时释放共享数据对象的锁。

  • 第9题:

    阅读下面实现堆栈类并发控制的部分代码 public class DataStack } private int idx=0; private int[] data=new int[8]; public void push(int i) { ______ { data[idx]=I: idx++; } } … } 程序中下画线处应填入的正确选项是

    A.synchronized

    B.synchronized(this)

    C.synchronized()

    D.synchronized(idx)


    正确答案:B
    解析:在Java中,使用synchronized关键字标识临界区。Java平台将每个由synchronized语句设置的对象设置一个锁,称为对象锁,它是一种独占的排他锁,即同一时刻最多只能有一个线程获取该锁。为了能够正常地使用对象锁,对共享数据的所有访问都必须在临界区内,同时临界区的共享数据必须是私有的,确保只能通过对象的方法才能访问到。本程序中,下画线后边的代码即为临界区,所以需要用synchronized关键字标识。

  • 第10题:

    以下哪个方法可以用来获得进度条的当前进度值?()

    • A、public synchronized int getProgress()
    • B、public synchronized void setIndeterminate (boolean indeterminate)
    • C、public synchronized void setProgress(int progress)
    • D、Public final synchronized void incrementProgressBy(int diff)

    正确答案:A

  • 第11题:

    public class NamedCounter {  private final String name;  private int count;  public NamedCounter(String name) { this.name = name; }  public String getName() { return name; }  public void increment() { coount++; }  public int getCount() { return count; } public void reset() { count = 0; } }  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

    正确答案:A,C,E

  • 第12题:

    单选题
    在堆栈类SharedStack的定义中,为了保证堆栈在并发操作中数据的正确性,应在下划线处填入的修饰符是(  )。(两个下划线的填写内容相同)public class SharedStack { ______ int idx = 0; ______ char[] data = new char[10]; public synchronized void push(char c){……} public synchronized void pop(){……}}
    A

    public

    B

    不使用修饰符

    C

    private

    D

    protected


    正确答案: D
    解析:
    并发性在一定意义上可以理解为并行,即是为了保证多个线程能够进行同时放访问。因此需要保证多个线程都对其拥有访问权限。在Java语言中,其修饰符的权限如下:①public:被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。②private:被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。③protect:被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。④不使用修饰符:只允许在同一个包中进行访问。而多线程的安全性不是由这些修饰符决定的,而是由synchronized、volatile等关键字来保证。所以答案选择A。

  • 第13题:

    阅读下列一个支持多线程并发操作的堆栈类代码段 public class MyStack{ private int idx=0; private int[]data=new int[8]; public______void push(int i){ data[idx]=i; idx + +; } …… } 在下画线处应填入的是

    A.synchronized

    B.wait

    C.blocked

    D.interrupt


    正确答案:A
    解析:synchronized修饰方法,表示此方法的执行需同步,其同步锁对应的对象为本对象。程序实现一个简单的压栈操作,因压栈过程不能同时出栈或读取栈信息,故操作需要同步。

  • 第14题:

    在堆栈类SharedStack的定义中,为了保证堆栈在并发操作中数据的正确性,应在下划线处填入的修饰符是(两个下划线的填写内容相同)

    public class SharedStack(

    ______int idx=0;

    ______char[]data=new char[10];

    public synchronized void push(char C) {......}

    public synchronized void pop{}{......}

    }

    A) public

    B) 不使用修饰符

    C) private

    D) protected

    A.

    B.

    C.

    D.


    正确答案:A

  • 第15题:

    在堆栈类Sharedstack的定义中,为了保证堆栈在并发操作中数据的正确性,应在下画线处填人的修饰符是(两个下画线的填写内容相同)( )。

    A.puhlic

    B.不使用修饰符

    C.private

    D.protected


    正确答案:C
    堆栈中为了保证访问数据的-致性,应该对类的数据进行封装,而实现类数据封装的级别是private。

  • 第16题:

    有如下程序: include using namespace std; class Pet{ char name[10]; public: Pet(c

    有如下程序:

    include<iostream>

    using namespace std;

    class Pet{

    char name[10];

    public:

    Pet(char*name){strcpy(this->name,name);}

    const char*getName()const {return name;}

    virtual void call()const=0;

    };

    class Dog:public Pet{

    public:

    Dog(char*name):Pet(name){}

    void call()const{cout<<"汪汪叫":}

    };

    class Cat:public Pet{

    public:

    Cat(char*name):Pet(name){}

    void call()const{cout<<"喵喵叫";}

    };

    int main(){

    Pet*pet1=new Dog("哈克"),*pet2=new Cat("吉米");

    cout<<pet1->getName();pet1->call();cout<<end1;

    cout<<pet2->getName();pet2->call();cout<<end1;

    return 0;

    }

    程序的输出结果是______。


    正确答案:哈克汪汪叫 吉米喵喵叫
    哈克汪汪叫 吉米喵喵叫 解析:此题考查的是虚函数与多态性。在成员函数的声明前面加上virual关键字,即可把函数声明为虚函数;在C++中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。即若基类和派生类中存在一模一样的成员函数,通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。本题中,在f()函数中,此题中,void call()在基类中被声明为虚函数,在主函数中,语句Pet*pet1=new Dog("哈克"),*pet2=new Cat("吉米");定义了基类的指针per1和pet2,并让它们分别指向派生类对象Dog和Cat。所以通过该指针调用call()时运行的是派生类的版本,分别输出哈克和吉米;而通过该指针调用 getName()运行的是基类的版本,分别输出汪汪叫和喵喵叫。

  • 第17题:

    为了支持压栈线程与弹栈线程之间的交互与同步,在下画线处依次填入的语句是 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,等待该堆栈的锁以便运行。

  • 第18题:

    有以下程序:include include using namespace std;class Y;class X{private

    有以下程序: #include <iostream> #include <string> using namespace std; class Y; class X { private: int x; char *strx; public: X(int a, char *str) { x=a; strx=new char[strlen(str)+1]; strcpy(strx,str); } void show(Y &ob) ; }; class Y { private: int y; char *stry; public: Y(int b,char *str) { y=b; stry=new char[strlen(str)+1]; strcpy(stry, str); } friend void X: :show(Y &ob) ; }; void X: :show(Y &ob) { cout<<strx<<", "; cout<<ob, stry<<end1; } int main ( ) { X a(10,"X"); Y b (20, "Y"); a. show(B) ; return 0; } 执行后的输出结果是( )。

    A.X,Y

    B.a,b

    C.X,X

    D.Y,Y


    正确答案:A
    解析:本题考核类的定义和友元函数的应用。①该程序中,类X的成员函数show()在类Y中说明为友元,因此,在该友元成员show()中可以访问类Y的私有成员stry。②成员函数show()的功能就是输出类X的私有成员strx和Y对象ob的私有成员stry,③主函数main()中定义了X类的一个对象a和Y类的一个对象b,并且都进行了初始化。然后调用对象a的成员函数show,输出对象a中私有成员strx中的内容和对象b中私有成员stry中的内容,即字符串stringX和stringY。

  • 第19题:

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

    A.this.notify

    B.interrupt

    C.this.wait

    D.sleep


    正确答案:A
    A。【解析】当一个线程使用的同步方法中用到某个变量,而此时有需要其他线程修改后才能符合本线程的需要,那么可以使用wait方法,wait方法的作用是使本线程等待,并允许其他线程使用此同步方法。当其他线程使用完后应使用notify或者notifyAll方法允许其他线程使用此同步方法。Interrupt方法的作用是在run方法执行完之前就消灭此线程,而sleep方法的作用是延迟一段时间后执行。所以本题是为了支持压栈线程与弹栈线程之间的交互与同步,所以选A。

  • 第20题:

    在堆栈类Sharedstack的定义中,为了保证堆栈在并发操作中数据的正确性,应在下画线处填入的修饰符是(两个下画线的填写内容相同)( )。 public class SharedStack{ int idx=0; char[]data=new char[10]; public synchtonized void push(char c){……} publR,synchronized void pop{……} }

    A.Dublic

    B.不使用修饰符

    C.private

    D.protected


    正确答案:C
    C。【解析】堆栈中为了保证访问数据的一致性,应该对类的数据进行封装,而实现类数据封装的级别是private。

  • 第21题:

    ( 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

  • 第22题:

    class Account {   private int balance;   public void setBalance(int b) { balance = b; }  public int getBalance() { return balance; }   public void clearBalance() { balance = 0; }   }   哪一个改变可以使 Account 类线程安全?() 

    • A、在第2行加 synchronized 修饰符。
    • B、在第3行加 synchronized 修饰符。
    • C、在第3行、第4行和第6行加 synchronized 修饰符。
    • D、在第4行、第6行和第8行加 synchronized 修饰符。

    正确答案:D

  • 第23题:

    public class TestFive {  private int x;  public void foo() {  int current = x;  x = current + 1;  }  public void go() {  for(int i=0;i<5;i++) {  new Thread() {  public void run() {  foo();  System.out.print(x + “, “);  } }.start();  }}}  Which two changes, taken together, would guarantee the output: 1, 2, 3, 4, 5, ?()

    • A、 Move the line 12 print statement into the foo() method.
    • B、 Change line 7 to public synchronized void go() {.
    • C、 Change the variable declaration on line 3 to private volatile int x;.
    • D、 Wrap the code inside the foo() method with a synchronized( this ) block.
    • E、 Wrap the for loop code inside the go() method with a synchronized block synchronized(this) { // for loop code here }.

    正确答案:A,D

  • 第24题:

    单选题
    class Account {   private int balance;   public void setBalance(int b) { balance = b; }  public int getBalance() { return balance; }   public void clearBalance() { balance = 0; }   }   哪一个改变可以使 Account 类线程安全?()
    A

    在第2行加 synchronized 修饰符。

    B

    在第3行加 synchronized 修饰符。

    C

    在第3行、第4行和第6行加 synchronized 修饰符。

    D

    在第4行、第6行和第8行加 synchronized 修饰符。


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