第八周课堂测试
1、下面代码中共有(C)个线程?
public class ThreadTest {
public static void main(String args[]){
MyThread myThread =new MyThread();
Thread t1=new Thread(myThread);
Thread t2=new Thread(myThread);
t1.start();
t2.start();
}
}
class MyThread extends Thread {
...
}
A .1
B .2
C .3
D .4
2、Java中,可以继承(B)类定义线程
A .Runnable
B .Thread
C .Future
D .Executor
3、以下(AB)方法会使线程进入阻塞状态?
A .Thread.sleep()
B .wait()
C .notify()
D .interrupt()
4、如果有以下代码段:
Thread thread = new Thread(new ________________() {
public void run() {...}
});
空白部分指定哪些类型可以通过编译?(AB)
A .Runnable
B .Thread
C .Future
D .Executor
5、调用线程的interrupt()方法 ,会抛出(CD)异常对象?
A .IllegalStateException
B .RuntimeException
C .InterruptedException
D .SecurityException
6、下列哪个叙述是错误的?(A)
A .线程新建后,不调用start方法也有机会获得CPU资源
B .如果两个线程需要调用同一个同步方法,那么一个线程调用该同步方法时,另一个线程必须等待。
C .目标对象中的run方法可能不启动多次
D .默认情况下,所有线程的优先级都是5级。
7、对于下列程序,哪个叙述是正确的?(A)
public class E {
public static void main(String args[]) {
Target target =new Target();
Thread thread =new Thread(target);
thread.start();
}
}
class Target implements Runnable{
public void run(){
System.out.println("ok");
}
}
A .JVM认为这个应用程序共有两个线程。
B .JVM认为这个应用程序只有一个主线程。
C .JVM认为这个应用程序只有一个thread线程。
D .thread的优先级是10级。
8、对于下列程序,哪个叙述是正确的?(B)
A .JVM认为这个应用程序共有两个线程。
B .JVM认为这个应用程序只有一个主线程。
C .JVM认为这个应用程序只有一个thread线程。
D .程序有编译错误,无法运行。
9、进程和程序的一个本质区别是(A)
A .前者为动态的,后者为静态的。
B .前者存储在内存,后者存储在外存。
C .前者在一个文件中,后者在多个文件中。
D .前者分时使用CPU,后者独占CPU。
10、进程的基本状态有:新建、运行、阻塞、死亡。(A)
A .true
B .false
11、下列说法正确的是(ABD)
A .Java语言的一大特性就是内置对多线程的支持。
B .main方法返回时,JVM就会结束Java应用程序。
C .Java应用程序中第一个线程结束后,JVM结束Java应用程序。
D .Java语言使用Thread类及其子类对象来表示线程。
12、下列关于线程状态与生命周期的说法,错误的是(BC)
A .在线程没有结束run()方法之前,不要让线程再调用start()方法,否则将发生IllegalThreadStateException异常。
B .run()方法负责通知JVM有新的线程等候切换。
C .执行sleep()结束后,该线程进入运行状态,得到CPU的使用权。
D .进入阻塞状态时,线程不能进入排队队列。
13、JVM的线程调度器的任务是使高优先级的线程能始终运行,一旦时间片有空闲,则使具有同等优先级的线程以轮流的方式顺序使用时间片。(A)
A .true
B .false
14、下列关于setPriority方法的说法,错误的是(C)
A .该方法更改线程的优先级。
B .该方法传入的参数为,要为线程设定的优先级。
C .该方法首先调用线程的 checkAccess 方法,且不带任何参数。这可能抛出IllegalArgumentException异常。
D .如果优先级不在MIN_PRIORITY到MAX_PRIORITY范围内,则抛出IllegalArgumentException异常。
15、当线程使用CPU资源的时间到时后,即使线程没有完成自己的全部操作,Java调度器也会中断当前线程的执行,把CPU的使用权切换给下一个排队等待的线程。(A)
A .true
B .false
16、下列关于守护线程的说法,正确的是(ABCD)
A .thread.setDaemon(true)必须在thread.start()之前设置,否则会报IllegalThreadStateException异常。
B .如果用户线程已经全部退出运行,只剩下守护线程存在,那么虚拟机也就退出了。
C .将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。
D .守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断。
17、不可以在非同步方法中使用wait()、notify()、notifyAll()。(A)
A .true
B .false
18、下列关于线程常用的方法的叙述,错误的是(CD)
A .让run方法执行完毕,线程就变成死亡状态。
B .如果线程在休眠时被打断,JVM会抛出InterruptedException异常。
C .一个已运行的线程没有进入死亡状态时,如果再给线程分配实体,则先前的实体会被垃圾收集器收集掉。
D .当线程进入死亡状态后,线程就不能够调用isAlive()方法了。
19、线程在新建和死亡状态,调用isAlive()方法返回的值是false。(A)
A .true
B .false
20、以下代码中有两个线程:(B)
public class E {
public static void main(String args[]) {
Target target =new Target();
Thread thread =new Thread(target);
target.run();
for(int i= 0;i<=10;i++) {
System.out.println("yes");
try{ Thread.sleep(1000);
}
catch(InterruptedException exp){}
}
}
}
class Target implements Runnable{
public void run() {
for(int i= 0;i<=10;i++) {
System.out.println("ok");
try{
Thread.sleep(1000);
}
catch(InterruptedException exp){}
}
}
}
A .true
B .false