第八章 多线程 题库 面向对象程序设计-题库 1、下列关于进程和线程的说法中,错误的是() A、 操作系统中每个独立执行的程序都可称之为一个进程 B、 操作系统中的每一个进程中都至少存在一个线程 C、 线程和进程一样,是由CPU轮流执行的 D、 线程和进程一样,是由CPU同时执行的 答案: D 2、下列关于Thread类的说法中,错误的是( ) A、 继承Thread类创建线程的方式可以防止出现多父类问题 B、 Thread类属于java.util包 C、 继承Thread的方式定义线程后,覆写的run()方法会在该线程的start()方法被调用后被JVM自动运行 D、 继承Thread的方式定义线程后,你不能在继承其他的类了,导致程序的可扩展性大大降低 答案: B 解析:Thread类属于java.lang包。 3、在Java多线程中,wait()方法作用是( ) A、 唤醒线程 B、 导致线程等待 C、 线程休眠 D、 结束线程 答案: B 4、下列关于线程优先级的描述,错误的是( ) A、 NORM_PRIORITY代表普通优先级,默认值是5 B、 一般情况下,主函数具有普通优先级 C、 新建线程的优先级默认为最低 D、 优先级高的线程获得先执行权的几率越大 答案: C 解析:新建线程将继承创建它的父线程的优先级,因此不一定是最低的优先级。 5、JAVA中调用Thread类的sleep()方法后,当前线程状态如何转换( ) A、 由运行状态进入阻塞状态 B、 由运行状态进入等待状态 C、 由阻塞状态进入等待状态 D、 由阻塞状态进入运行状态 答案: A 解析:sleep()方法使线程线程休眠,从运行状态进入到阻塞状态。 6、关于Thread类yield()方法的作用,下列描述中正确的是( ) A、 使线程由运行状态进入阻塞状态 B、 使线程由运行状态进入就绪状态 C、 使线程由阻塞状态进入等待状态 D、 使线程由阻塞状态进入运行状态 答案: B 解析:yield()方法不会阻塞该线程,它只是将线程转换成就绪状态,让系统的调度器重新调度一次。 7、下面关于yield()方法描述正确的是( ) A、 yield()方法是用于合并线程 B、 yield()方法是用于启动线程 C、 yield()方法是用于线程让步 D、 yield()方法是用于线程同步 答案: C 8、下面关于join()方法描述正确的是( ) A、 join()方法是用于线程休眠 B、 join()方法是用于线程启动 C、 join()方法是用于线程插队 D、 join()方法是用于线程同步 答案: C 9、关于Thread类join()方法的作用,下列描述中正确的是( ) A、 使线程由运行状态进入阻塞状态 B、 使线程由运行状态进入就绪状态 C、 使线程由阻塞状态进入等待状态 D、 使线程由阻塞状态进入运行状态 答案: A 解析:当在某个线程中调用其他线程的join()方法时,调用的线程将被阻塞。 10、下列关于同步代码块的特征说法错误的是( ) A、 可以解决多线程的安全问题 B、 降低程序的性能 C、 使用synchronized关键字修饰 D、 多线程同步的锁只能是object对象 答案: D 解析:同步代码块中的锁对象可以是任意类型的对象。 11、以下选项中可以正确定义一个同步代码块的是( ) A、 synchronized(常量){} B、 synchronized(对象){} C、 synchronized(){} D、 synchronized(任意基本数据类型){} 答案: B 解析: 同步代码块的语法格式如下: synchronized(lock){ 操作共享资源代码块 } 其中lock是一个锁对象,锁对象可以是任意类型的对象。 12、下面关于静态同步方法说法错误的是( ) A、 静态方法必须使用class对象同步。 B、 对于静态的同步方法而言,该方法的同步监视器不是this,而是该类本身。 C、 静态同步方法和以当前类为同步监视器的同步代码块不能同时执行。 D、 一个类中的多个同步静态方法可以同时被多个线程执行。 答案: D 解析:对于同步非静态方法而言,该方法的同步监视器是this,即调用该方法的Java对象;对于静态的同步方法而言,该方法的同步监视器不是this,而是该类本身。它们在类范围内是同步的,也就是同一时间只能有一个线程可以访问所有同步静态方法中的一个。 13、下列情况中,不会使线程返回所持有的对象锁的是( ) A、 当synchronized()语句块执行完毕 B、 当调用了线程的suspend()方法 C、 当在synchronized()语句块中出现异常(exception) D、 当持有锁的线程调用该对象的wait()方法 答案: B 解析:suspend()方法表示如果目标线程挂起时在保护关键系统资源的监视器上保持有锁,则在目标线程重新开始以前任何线程都不能访问该资源,已过时,不建议使用。 14、阅读下列程序: public class Demo extends Thread implements Runnable{ —–① public void run(){ System.out.println(“this is run()”); } public static void main(String args[]){ Thread thread=new Thread(new Demo()); —–② thread.start(); } } 程序的运行结果是() A、 ①行出现编译错误 B、 ②行出现编译错误 C、 出现运行错误 D、 程序正常执行输出thisisrun() 答案: D 15、下列有关Java进程和线程的说法,正确的是() A、 在一个操作系统中,每个独立执行的程序都可称之为一个进程,也就是“正在运行的程序” B、 在多任务操作系统中,进程是可以并发执行的,例如可以一边听音乐一边聊天 C、 在一个进程中还可以有多个执行单同时运行,这些执行单可以看作程序执行的一条条线索,被称为线程 D、 操作系统中的每一个进程中都至少存在一个线程 答案: ACD 16、请阅读下列代码: A、 Thread target=new MyThread(); B、 read myThread=new Thread(target); C、 哪个选项不可以创建target对象并正确编译() D、 public class MyThread extends Runnable { public void run(){} } E、 public class MyThread extends Thread { public void run() {} } F、 public class MyThread implements Runnable {public void run() {}} G、 public class MyThread implements Thread {void run() {}} 答案: ABD 17、下列关于Runnable接口的说法,正确的是( ) A、 Runnable适合于多个相同程序代码线程去处理统一资源的情况 B、 Runnable可以使类在继承其他类的同时,还能实现多线程的功能 C、 Runnable可以避免由于java的单继承机制带来的局限 D、 Runnable能增加程序的健壮性,代码能够被多个线程共享 答案: ABCD 18、下列选项中,属于可以实现多线程程序方式的是() A、 继承Thread类 B、 自己创建一个Thread类即可 C、 实现Runnable接口 D、 实现Comparable接口 答案: AC 19、下面关于线程状态及转换的描述,正确的是() A、 线程只能从新建状态转换到就绪状态,反之则不能 B、 当线程对象调用了start()方法后,该线程就进入运行状态 C、 线程从阻塞状态只能进入就绪状态,而不能直接进入运行状态 D、 一旦进入死亡状态,线程将不再拥有运行的资格,也不能再转换到其他状态 答案: ACD 20、在Java基础案例教程中,当线程调用了某个对象的wait(long timeout)方法时,以下说法正确的是() A、 可以通过其他线程调用notify()方法唤醒当前等待中的线程 B、 可以通过其他线程调用notifyAll()方法唤醒当前等待中的线程 C、 可以等待限时时间结束后进行状态转换 D、 以上都正确 答案: ABCD 21、下列关于同步方法的描述中,正确的是( ) A、 同步方法在某一时刻只允许一个线程访问 B、 同步方法也有锁,它的锁就是当前调用该方法的对象 C、 同步方法也可以是静态方法 D、 同步方法可以节省资源,提高效率 答案: ABC 22、以下关于解决死锁的说法正确的是( ) A、 避免一个进程等待序列{P1,P2,…Pn},其中P1等待P2占有的某一资源,…Pn等待P1占有的某一资源,可以避免死锁 B、 打破互斥条件,即允许进程同时访问某些资源 C、 打破不可抢占条件,即允许进程强行从某些资源占有者那里夺取资源 D、 使用打破循环等待条件的方法不能避免线程死锁 答案: ABC 23、请阅读下列程序: public class Example { public static void main(String[] args) { SaleThread saleThread = new SaleThread(); // 创建Ticket1 对象 // 创建并开启四个线程 new Thread(saleThread, “窗口1 “).start(); new Thread(saleThread, “窗口2”).start(); new Thread(saleThread, “窗口3”).start(); new Thread(saleThread, “窗口4”).start(); } } // 定义Ticket1类实现Runnable接口 class SaleThread implements Runnable { private int tickets = 10; // 10张票 public void run() { while (tickets > 0) { try { Thread.sleep(5); // 经过此处的线程休眠10毫秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + “—卖出的票” + tickets–); } } } 运行以上程序,可能的运行结果是( ) A、 10张票由同一个窗口卖出 B、 4个窗口各卖了10张票 C、 某个窗口卖出了负数张票 D、 同一张票被卖出两次 答案: CD 解析:由于发生线程的安全问题,卖出负数张票或者同一张票被卖出两次是有很有可能的。因为多线程共享资源,所以选项A和B均不可能,因此答案选CD。 24、一个进程只能包含一个线程。 答案: 错误 25、使用Thread类创建多线程程序可以实现资源共享。 答案: 错误 26、在JAVA中一个类只要继承了java.lang.Thread类,那么这个类中的任何方法都会在该线程的start()方法被调用后被JVM自动运行。 答案: 错误 解析:在该线程的start()方法被调用后,除了run()方法其他方法不一定会被JVM自动运行。 27、Runnable接口中只有一个run()方法。 答案: 正确 28、实现Runnable接口方式创建线程同样需要重写run()方法。 答案: 正确 解析:run()方法是线程执行的主体,实现Runnable接口方式创建线程同样需要重写run()方法。 29、线程可以通过继承Thread类或实现Runnable接口这两种方法来创建。 答案: 正确 30、实现Runnable接口相比继承Thread类方式创建线程,优点在于它解决了单继承带来的局限性。 答案: 正确 31、线程对象创建完成时,该线程处于就绪状态。 答案: 错误 解析:线程对象创建完成时,线程处于新建状态。 32、线程的优先级数值越大,表示该线程的优先级越低。 答案: 错误 解析:线程的优先级数值越大,那么这个线程的优先级越高。 33、JAVA中Thread类的sleep()是静态方法,只能控制当前正在运行的线程休眠,而不能控制其他线程休眠。 答案: 正确 34、yield()方法和sleep()方法相同,都可以让当前正在运行的线程进入阻塞状态。 答案: 错误 解析:yield()方法和sleep()方法有点相似,都可以让当前正在运行的线程暂停,区别在于yield()方法不会阻塞该线程,它只是将线程转换成就绪状态,让系统的调度器重新调度一次。 35、Thread类中提供了一个join()方法,可以实现线程插队的功能。 答案: 正确 36、多线程操作共享资源一定会导致线程的安全问题。 答案: 错误 解析:多线程操作共享资源可能会导致线程的安全问题,也可能不会。 37、使用synchronized关键字修饰的代码块,被称作同步代码块。 答案: 正确 38、线程安全问题其实就是由多个线程同时处理共享资源所导致的,通过同步代码块能够解决该问题。 答案: 正确 解析:Java中提供了同步机制。当多个线程使用同一个共享资源时,可以将处理共享资源的代码放置在一个代码块中,使用synchronized关键字来修饰,被称作同步代码块。 39、在Java中提供了两种多线程实现方式,其中一种是继承java.lang包下的【】类。 答案: Thread; 40、Java中有两种创建线程的方式,一种是继承Thread类,另外一种是实现【】接口。 答案: Runnable; 41、在Java线程中,线程整个生命周期可以分为五个阶段,分别是【】、【】、运行状态、阻塞状态和【】。 答案: 新建状态;就绪状态;死亡状态; 42、JAVA中thread类的sleep()方法可以让当前线程进入【】状态。 答案: 休眠; 43、Java中线程让步可以通过【】方法来实现。 答案: yield(); 44、在Thread类中提供了一个【】方法来实现线程插队。 答案: join(); 45、在Java多线程中,当多个线程使用同一个共享资源时,可以将处理共享资源的代码放在一个使用【】关键字修饰的代码块中。 答案: synchronized; 46、Java中静态方法的锁是该方法所在类的【】对象。 答案: class;
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/69656.html