多线程练习题目

合集下载

Java多线程习题

Java多线程习题
C、Java.1ang.ThreadD、java.1ang.Runnable
9、下列说法中错误的一项是( )。
A、Applet必须全部重写其生命周期方法
B、Applet不必全部重写其生命周期方法
C、Applet中使用了线程,则需要重写相应的生命周期方法
D、stop()总是在destroy()之前被调用。
B、用于建立与某个数据源的连接可采用DriverManager类的getConnection方法
C、建立数据库连接时,必须要进行异常处理
D JDBC中查询语句的执行方法必须采用Statement类实现
12、运行下列程序,会产生什么结果()
public class X extends Thread implements Runable{ public void run(){
18•实现线程体的方式除了继承Thread类,还可以实现接口。
E)A、Cloneable B、Runnable C、Iterable D、Serializable二、填空题
1、 若在高优先级线程的run()方法中调用_____方法,则该线程将让出CPU使其他 —
的线程获得CPU的使用权。
2、 通过实现Runnable接口创建线程的过程是:将实现Runnable的一个亠作为
Java
知识点:
Java的多线程,实现多线程的两种方法,线程控制、调度方法
一、选择题
1、什么原因可导致线程停止执行。 ( )
A.线程调用了wait()方法;
B.线程调用了yield()方法;
C.线程调用了pause()方法;
D.线程调用了sleep()方法。
2、 哪个方法是实现Runnable接口所需的?
13、下面哪个方法可以在任何时候被任何线程调用? ()

java多线程练习题(打印版)

java多线程练习题(打印版)

java多线程练习题(打印版)### Java多线程练习题#### 题目一:实现一个简单的线程编写一个Java程序,创建一个线程,该线程打印出从1到10的数字。

```javapublic class SimpleThread extends Thread {public void run() {for (int i = 1; i <= 10; i++) {System.out.println(i);}}public static void main(String[] args) {SimpleThread thread = new SimpleThread();thread.start();}}```#### 题目二:线程同步编写一个Java程序,创建两个线程,它们交替打印字符串"A"和"B",直到每个线程打印5次。

```javapublic class ThreadSync {private static final Object lock = new Object();public static void main(String[] args) {Thread threadA = new Thread(() -> {for (int i = 0; i < 5; i++) {synchronized (lock) {System.out.print("A");lock.notify();try {lock.wait();} catch (InterruptedException e) { e.printStackTrace();}}}});Thread threadB = new Thread(() -> {for (int i = 0; i < 5; i++) {synchronized (lock) {System.out.print("B");lock.notify();try {lock.wait();} catch (InterruptedException e) { e.printStackTrace();}}}});threadA.start();threadB.start();}}```#### 题目三:生产者-消费者问题编写一个Java程序,模拟生产者-消费者问题。

java多线程与网络程序设计

java多线程与网络程序设计

多线程实习题目实习题目1:源代码:/**Ticket.java*/package lab7;class Ticket{int ticketNum=50;boolean flag=false;//定义票是否卖完public Ticket(){}public Ticket(int num){this.ticketNum=num;}public synchronized void sellTicket(Seller s){if(ticketNum>0){System.out.println("第"+s.num+"售票点卖出了第"+ticketNum +"张票……");ticketNum--;}else{flag=true;}}}/**Seller.java*/package lab7;class Seller implements Runnable{int num;Ticket rs;public Seller(int num,Ticket rs){this.num=num;this.rs=rs;}public void run(){while(!rs.flag){rs.sellTicket(this);try{Thread.sleep(100);}catch(InterruptedException e){e.printStackTrace();}}}}/**Exercise1.java*/package lab7;class Exercise1{public static void main(String[]args){ Ticket rs=new Ticket(100);for(int i=0;i<10;i++){new Thread(new Seller(i,rs)).start();}}}程序运行结果:…实习题目2:源代码:/**CBank.java*/package lab7;class CBank{private static int sum=0;public static synchronized void add(int n){int tmp=sum;tmp=tmp+n;//累加汇款总额try{Thread.sleep((int)(10000*Math.random()));//小睡几秒钟}catch(InterruptedException e){}sum=tmp;System.out.println("sum="+sum);}}/**CCustomer.java*/package lab7;class CCustomer extends Thread//CCustomer类,继承自Thread类{public void run(){//run()methodfor(int i=1;i<=3;i++)CBank.add(100);//将100元分三次汇入}}/**Ex7_1.java*/package lab7;public class Ex7_1{public static void main(String args[]){CCustomer c1=new CCustomer();CCustomer c2=new CCustomer();c1.start();c2.start();}}题目解答:①在题目给定的程序中,每一次程序的运行的结果不大相同,因为两个线程没有在同一进程内多线程共享资源共享.synchronized d关键字,这样程序②本程序将CBank类的add方法变为同步方法,即加上synchronize的每次运行结果均相同,程序的运行结果如下:③对于该题目为什么要进行异常处理?答:因为对于大多数错误处理机制依靠的是程序员自身的警惕性,而不是编程语言强制的,因如果程序员不够警惕,出错的几率很大如果任何线程中断了该线程,java中把异常处理机制放到编程语言中,因此强制程序员去使用他,不然无法编译通过,更重要的是异常不能被忽略,保证一定要去处理它,异常提供了从错误状态进行可靠恢复的途径,而不需要退出程序.对于该题目为什么要进行处理,因为任何其他线程中断了该线程,就会抛出异常,必须进行异常处理,进行异常处理以后,当前线程的中断状态被清除.实习题目3:源代码:/**Bread.java*/package lab7;public class Bread implements Runnable{int number=0;//面包数量public synchronized void produce(){System.out.println("启动消费\n还没有生产出面包,等待中...");System.out.println("开始生产...");while(number<5){number++;System.out.println(number+"个");try{Thread.sleep(200);}catch(InterruptedException ee){ee.printStackTrace();}}System.out.println("生产完毕.");notify();}public synchronized void consume(){System.out.println("开始消费...");while(number>0){System.out.println(number+"个");number--;try{Thread.sleep(200);}catch(InterruptedException ee){ee.printStackTrace();}}System.out.println("消费完毕.");}public void run(){if(Thread.currentThread().getName().equals("breadProduce")){produce();}elseif(Thread.currentThread().getName().equals("breadConsume")){ consume();}}}/**Exercise3.java*/package lab7;public class Exercise3{public static void main(String[]args){Bread bread=new Bread();Thread thread1=new Thread(bread);Thread thread2=new Thread(bread);thread1.setName("breadProduce");thread2.setName("breadConsume");thread1.start();thread2.start();}}程序运行结果:实习总结:本次的实习相对比较顺利,我们无法控制相同优先级的线程调度顺序,但是我们可以使用线程同步控制可达到我们想要的结果.最重要的是要理解线程是如何进行资源共享的.线程同步使得众线程对数据可以有条不紊地操作而不会发生混乱,而且线程同步的使用使得线程之间有了CPU的相互转让使得其他线程有获得CPU使用权.网络基础实习题目实习题目1:源代码:/**Exercise1.java*/package internet;import .*;public class Exercise1{public static void main(String[]args){String str="";InetAddress address1=null;InetAddress address2=null;try{address1=InetAddress.getByName(str);address2=InetAddress.getLocalHost();}catch(UnknownHostException ee){ee.printStackTrace();}finally{System.out.println("学校IP地址:"+address1.getHostAddress());System.out.println("本机的IP地址:"+address2.getHostAddress());System.out.println("本机的名称"+address2.getHostName());}}}程序的运行结果:实习题目2:源代码:/**Client.java*/package internet;import .*;import java.io.*;public class Client{public static void main(String[]args){Socket mysocket;DataInputStream cin1=null;DataOutputStream cout1=null;DataInputStream cin2=null;try{mysocket=new Socket("192.168.208.136",8888);cin1=new DataInputStream(mysocket.getInputStream());cout1=new DataOutputStream(mysocket.getOutputStream());cin2=new DataInputStream(System.in);String r;while(true){r=cin2.readLine();cout1.writeUTF(r);r=cin1.readUTF();System.out.println(r);if(r.equalsIgnoreCase("Bye")){cin1.close();cin2.close();cout1.close();mysocket.close();break;}Thread.sleep(1000);}}catch(Exception ee){ee.printStackTrace();}}}/**Server.java*/package internet;import java.io.*;import .*;import java.util.*;import java.text.SimpleDateFormat;public class Server{public static void main(String[]args){ServerSocket server=null;Socket matcher=null;DataOutputStream cout=null;DataInputStream cin=null;SimpleDateFormat form=new SimpleDateFormat("HH:mm:ss");String r;try{server=new ServerSocket(8888);}catch(IOException ee){ee.printStackTrace();}try{System.out.println("The Server starts...");matcher=server.accept();cout=new DataOutputStream(matcher.getOutputStream());cin=new DataInputStream(matcher.getInputStream());String time;while(true){byte[]b;r=cin.readUTF();if(r.equalsIgnoreCase("Time")){System.out.println(r);time="Current time is:"+form.format(new Date());cout.writeUTF(time);}else if(r.equalsIgnoreCase("Exit")){cout.writeUTF("Bye");cout.close();cin.close();server.close();matcher.close();}else{System.out.println(r);cout.writeUTF("Unknown request,please repeat...");}}}catch(Exception ee){System.out.println("Connection interrupted...");}}}程序的运行结果如下(由于虚拟机没安装中文输入法,不支持中文,暂用英文):客户端程序运行结果:服务端(虚拟机端)程序的运行结果:实习题目3:源代码:/**UDPMessage.java*/package internet;import java.awt.*;import java.awt.event.*;import java.io.IOException;import .*;import javax.swing.*;public class UDPMessage extends JFrame implements ActionListener,Runnable{private JTextArea text;private JTextField ipText;private JTextField sendText;private JButton button;private DatagramSocket socket;private JScrollBar vsBar;Thread thread;public UDPMessage(){setTitle("UDP Chat Frame");setBounds(100,100,400,300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(new BorderLayout());text=new JTextArea();text.setEditable(false);JScrollPane textPanel=new JScrollPane(text);vsBar=textPanel.getVerticalScrollBar();add(textPanel,BorderLayout.CENTER);JPanel panel=new JPanel();BorderLayout panelLayout=new BorderLayout();panelLayout.setHgap(5);panel.setLayout(panelLayout);ipText=new JTextField("172.17.62.138");panel.add(ipText,BorderLayout.WEST);sendText=new JTextField();panel.add(sendText,BorderLayout.CENTER);button=new JButton("Send");panel.add(button,BorderLayout.EAST);add(panel,BorderLayout.SOUTH);setVisible(true);server();button.addActionListener(this);}private void server(){thread=new Thread(this);thread.start();}public void actionPerformed(ActionEvent ev){try{bytebuffer[]=(InetAddress.getLocalHost().getHostAddress()+"\n"+sendText.getText().trim()+"\n").getBytes();InetAddressaddress1=InetAddress.getByName(ipText.getText().trim());InetAddress address2=InetAddress.getLocalHost();DatagramPacket datapack=newDatagramPacket(buffer,buffer.length,address1,8888);DatagramSocket maildata=new DatagramSocket();maildata.send(datapack);text.append(InetAddress.getLocalHost().getHostAddress()+"\n "+sendText.getText().trim()+"\n");sendText.setText(null);}catch(Exception ee){ee.printStackTrace();}}public void run(){DatagramPacket pack=null;DatagramSocket maildata=null;byte[]data=new byte[8192];try{pack=new DatagramPacket(data,data.length);maildata=new DatagramSocket(8888);}catch(Exception ee){ee.printStackTrace();}while(true){if(maildata==null)break;elsetry{maildata.receive(pack);String message=newString(pack.getData(),0,pack.getLength());text.append(message);}catch(Exception ee){ee.printStackTrace();}}}public static void main(String args[]){JFrame frame=new UDPMessage();}}说明:其实还有另外一程序,大同小异,文件名为“CopyOfUDPMessage.java”,本次两个程序“UDPMessage.java”在Unix虚拟机里面,“CopyOfUDPMessage.java”在Windows环境下。

多线程面试题c++ 4个线程设计问题

多线程面试题c++ 4个线程设计问题

多线程面试题c++ 4个线程设计问题
1.题目:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码子线程与主线程必有一个满足条件(flag == num),不满足条件的那个线程不可能获取unique_lock(会在wait中释放),只有满足条件的线程才能获取锁,执行程序
2.题目:编写一个程序,开启3个线程,这3个线程的ID分别为A、
B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

3.题目(google笔试题):有四个线程1、2、3、4。

线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。

初始都为空。

现要让四个文件呈如下格式:
A:1 2 3 4 1 2....
B:2 3 4 1 2 3....
C:3 4 1 2 3 4....
D:4 1 2 3 4 1....
4.题目:有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者读时写者也不能写。

5.题目:编写程序完成如下功能:
1)有一int型全局变量g_Flag初始值为0
2)在主线称中起动线程1,打印“this is thread1”,并将g_Flag 设置为1
3)在主线称中启动线程2,打印“this is thread2”,并将g_Flag 设置为2
4)线程序1需要在线程2退出后才能退出
5)主线程在检测到g_Flag从1变为2,或者从2变为1的时候退出。

多线程题目及答案

多线程题目及答案

35. 并行和并发有什么区别?•并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。

••并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。

••在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。

如hadoop分布式集群。

•所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。

36. 线程和进程的区别?简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。

进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。

线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。

同一进程中的多个线程之间可以并发执行。

37. 守护线程是什么?守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程。

38. 创建线程有哪几种方式?①. 继承Thread类创建线程类•定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。

因此把run()方法称为执行体。

••创建Thread子类的实例,即创建了线程对象。

••调用线程对象的start()方法来启动该线程。

•②. 通过Runnable接口创建线程类•定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。

••创建Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

••调用线程对象的start()方法来启动该线程。

•③. 通过Callable和Future创建线程•创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。

••创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

最全多线程经典面试题和答案

最全多线程经典面试题和答案

最全多线程经典⾯试题和答案Java实现线程有哪⼏种⽅式?1、继承Thread类实现多线程2、实现Runnable接⼝⽅式实现多线程3、使⽤ExecutorService、Callable、Future实现有返回结果的多线程多线程同步有哪⼏种⽅法?Synchronized关键字,Lock锁实现,分布式锁等。

Runnable和Thread⽤哪个好?Java不⽀持类的多重继承,但允许你实现多个接⼝。

所以如果你要继承其他类,也为了减少类之间的耦合性,Runnable会更好。

Java中notify和notifyAll有什么区别?notify()⽅法不能唤醒某个具体的线程,所以只有⼀个线程在等待的时候它才有⽤武之地。

⽽notifyAll()唤醒所有线程并允许他们争夺锁确保了⾄少有⼀个线程能继续运⾏。

为什么wait/notify/notifyAll这些⽅法不在thread类⾥⾯?这是个设计相关的问题,它考察的是⾯试者对现有系统和⼀些普遍存在但看起来不合理的事物的看法。

回答这些问题的时候,你要说明为什么把这些⽅法放在Object类⾥是有意义的,还有不把它放在Thread类⾥的原因。

⼀个很明显的原因是JAVA提供的锁是对象级的⽽不是线程级的,每个对象都有锁,通过线程获得。

如果线程需要等待某些锁那么调⽤对象中的wait()⽅法就有意义了。

如果wait()⽅法定义在Thread类中,线程正在等待的是哪个锁就不明显了。

简单的说,由于wait,notify和notifyAll都是锁级别的操作,所以把他们定义在Object类中因为锁属于对象。

为什么wait和notify⽅法要在同步块中调⽤?主要是因为Java API强制要求这样做,如果你不这么做,你的代码会抛出IllegalMonitorStateException异常。

还有⼀个原因是为了避免wait 和notify之间产⽣竞态条件。

什么是死锁?如何避免死锁?死锁就是两个线程相互等待对⽅释放对象锁。

java 多线程 编程题

java 多线程 编程题

java 多线程编程题
好的,以下是一个简单的Java 多线程编程题目:
题目:实现一个线程安全的计数器,当多个线程同时对计数器进行加1 操作时,计数器能够正确地累加计数。

要求:
1.计数器的初始值为0。

2.当多个线程同时对计数器进行加1 操作时,计数器能够正确地累加计数,保证计数
值的正确性。

3.使用synchronized 关键字保证计数器的线程安全性。

示例代码:
java
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
在这个示例代码中,我们定义了一个名为Counter 的类,它包含一个名为count 的整型变量和一个名为increment 的方法。

increment 方法用于将count 变量的值加1,并使用synchronized 关键字保证其线程安全性。

我们还定义了一个名为getCount 的方法,它也使用了synchronized 关键字来保证线程安全性,用于返回当前的计数值。

多线程练习题目

多线程练习题目

多线程练习题目多线程练习题目多线程一、单项1.下述哪个选项为真?( )A.Error类是一个RoutimeException异常B.任何抛出一个RoutimeException异常的语句必须包含在try块之内C.任何抛出一个Error对象的语句必须包含在try块之内D. 任何抛出一个Exception异常的语句必须包含在try块之内2.下列关于Java线程的说法哪些是正确的?( )A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题C.Thread类属于java.util程序包D.以上说法无一正确3.哪个关键字可以对对象加互斥锁?( )A.transientB.synchronizedC.serializeD.static4.下列哪个方法可用于创建一个可运行的类?()A.public class X implements Runable { public void run() {……} }B. public class X implements Thread { public void run() {……} }C. public class X implements Thread { public int run() {……} }D.public class X implements Runable { p rotected void run() {……} }5.下面哪个选项不会直接引起线程停止执行?( )A.从一个同步语句块中退出来B.调用一个对象的wait方法C.调用一个输入流对象的read方法D.调用一个线程对象的setPriority方法6.使当前线程进入阻塞状态,直到被唤醒的方法是( )A.resume()方法B.wait()方法C.suspend()方法D.notify()方法7.运行下列程序,会产生的结果是( )public class X extends Thread implements Runnable {public void run(){System.out.print ln(“this is run()”);}public static void main(String[] args){Thread t=new Thread(new X());t.start();}}A.第一行会发生编译错误B. 第六行会发生编译错误C.第六行会发生运行错误D.程序会运行和启动/doc/df10316442.html,ng.ThreadGroup类的作用为( )A.使任何类都可以为线程提供线程体B.定义了线程与交互的方法C.提供了线程组或组中的每个线程进行操作的方法D.以上都不是9.实现线程的创建有( )方法A.一种B. 两种 C.三种 D.四种10.一个进程可以包含( )个线程A.一B. 二C. 三D.四11.Java中的线程模型包含( )A.一个虚拟处理机B.CPU执行的代码C.代码操作的数据D.以上都是12.关于线程组以下说法错误的是( )A.在应用程序中线程可以独立存在,不一定要属于某个线程B.一个线程只能创建时设置其线程组C.线程组由/doc/df10316442.html,ng包中的ThreadGroup类实现D.线程组使一组线程可以作为一个对象进行统一处里或维护13.下列定义线程方法正确的是( )A.Public Thread();B.Public Thread(Runnable target);C.Public Thread(ThreadGroup group,Runnable target);D.以上都正确14.以下不属于Thread类提供的线程控制方法是( )A.break()B.sleep()C.yield()D.join()15.下列关于线程的说法正确的是( )A.线程就是进程B.线程在操作系统出现后就产生了C.Soloris是支持线程的操作系统D.在单处理器和多处理器上多个线程不可以并发执行16.下列不属于线程生命周期状态的是( )A. 新建状态B.可运行状态C. 运行状态D.解锁状态17.以下不属于Thread类的线程优先级静态常量的是( )A.MIN_PRIORITYB.MAX__PRIORITYC.NORM__PRIORITYD.BEST__PRIORITY18.( )关键字可以对对象加互斥锁。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

多线程一、单项1.下述哪个选项为真?( )A.Error类是一个RoutimeException异常B.任何抛出一个RoutimeException异常的语句必须包含在try块之C.任何抛出一个Error对象的语句必须包含在try块之D. 任何抛出一个Exception异常的语句必须包含在try块之2.下列关于Java线程的说法哪些是正确的?( )A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题C.Thread类属于java.util程序包D.以上说法无一正确3.哪个关键字可以对对象加互斥锁?( )A.transientB.synchronizedC.serializeD.static4.下列哪个方法可用于创建一个可运行的类?()A.public class X implements Runable { public void run() {……} }B. public class X implements Thread { public void run() {……} }C. public class X implements Thread { public int run() {……} } D.public class X implements Runable { protected voi d run() {……} }5.下面哪个选项不会直接引起线程停止执行?( )A.从一个同步语句块中退出来B.调用一个对象的wait方法C.调用一个输入流对象的read方法D.调用一个线程对象的setPriority方法6.使当前线程进入阻塞状态,直到被唤醒的方法是( )A.resume()方法B.wait()方法C.suspend()方法D.notify()方法7.运行下列程序,会产生的结果是( )public class X extends Thread implements Runnable {public void run(){System.out.println(“this is run()”);}public static void main(String[] args){Thread t=new Thread(new X());t.start();}}A.第一行会发生编译错误B. 第六行会发生编译错误C.第六行会发生运行错误D.程序会运行和启动ng.ThreadGroup类的作用为 ( )A.使任何类都可以为线程提供线程体B.定义了线程与交互的方法C.提供了线程组或组中的每个线程进行操作的方法D.以上都不是9.实现线程的创建有( )方法A.一种 B. 两种 C.三种 D.四种10.一个进程可以包含( )个线程A.一B. 二C. 三D.四11.Java中的线程模型包含( )A.一个虚拟处理机B.CPU执行的代码C.代码操作的数据D.以上都是12.关于线程组以下说法错误的是( )A.在应用程序中线程可以独立存在,不一定要属于某个线程B.一个线程只能创建时设置其线程组C.线程组由ng包中的ThreadGroup类实现D.线程组使一组线程可以作为一个对象进行统一处里或维护13.下列定义线程方确的是( )A.Public Thread();B.Public Thread(Runnable target);C.Public Thread(ThreadGroup group,Runnable target);D.以上都正确14.以下不属于Thread类提供的线程控制方法是( )A.break()B.sleep()C.yield()D.join()15.下列关于线程的说确的是( )A.线程就是进程B.线程在操作系统出现后就产生了C.Soloris是支持线程的操作系统D.在单处理器和多处理器上多个线程不可以并发执行16.下列不属于线程生命周期状态的是( )A. 新建状态B.可运行状态C. 运行状态D.解锁状态17.以下不属于Thread类的线程优先级静态常量的是( )A.MIN_PRIORITYB.MAX__PRIORITYC.NORM__PRIORITYD.BEST__PRIORITY18.( )关键字可以对对象加互斥锁。

A.synchronizedB.transientC.serializeD.static19.下列( )方法和resume()方法相互搭配,使线程停止执行,然后调用resume()方法恢复线程。

A.interrupt()B.stop()C.suspend()D.yield()20.Thread类的方法中,getName()方法的作用是( )A.返回线程组的名称B.设置线程组的名称C.返回线程的名称D.设置线程的名称21.线程调用了sleep()方法后,该线程将进入( )状态A.可运行状态B.运行状态C.阻塞状态D.终止状态22.下列( )类或接口定义了线程同步与交互的方法。

A.ThreadB.RunnableC.ObjectD.ThreadGroup23.Java中线程是由线程类的( )方法定义的。

A.init()B.run()C.application()D.main()24.线程控制方法中,stop()的作用是( )A.强行终止线程B.使比其低的优先级线程运行C.只让给同优先级运行D.返回当前线程的引用25.在以下( )情况下,线程就进入可运行状态。

A.线程调用了sleep()方法时B.线程调用了join()方法时C.线程调用了yield()方法时D.以上都是26.下列说法中,正确的一项是()A.单处理机的计算机上,2个线程实际上不能并发执行B.单处理机的计算机上,2个线程实际上能够并发执行C.一个线程可以包含多个进程D.一个进程可以包含多个线程27.下列说法中错误的一项是()A.线程就是程序B.线程是一个程序的单个执行流C.多线程是指一个程序的多个执行流D.多线程用于实现并发28.下列关于Thread类的线程控制方法的说法中错误的一项是()A.线程可以通过调用sleep()方法使比当前线程优先级的线程运行B.线程可以通过调用yield()方法和当前线程优先级一样的线程运行C.线程sleep()方法调用结束后,该线程进入运行状态D.若没有相同优先级的线程处于可运行状态,县城调用yield()方法时,当前线程将继续执行30.下列哪一个操作不能使线程从等待阻塞状态进入对象锁阻塞状态?A.等待阻塞状态下的线程被notify()唤醒B.等待阻塞状态下的线程被interrput()中断C.等待时间到D.等待阻塞状态下的进程调用wait()方法31.下列哪一个方法可以使线程从运行状态进入其他阻塞状态?A. sleep()B. wait()C. yield()D. start()32.下列哪一个不属于Java线程模型的组成部分?A.虚拟的CPUB.虚拟CPU执行的代码C.代码所操作的数据D.执行流B.输出“INTERRUPTED”C.输出“DONE WAITING”D.编译通过,但是不输出任何字符串34.下列哪一种情况一定不会使当前的线程暂停执行?()A.该线程抛出一个InterruptedExceptionB.该线程调用sleep()方法C.该线程创建一个新的子线程D.该线程从输入流读取文件数据35.下列说法中错误的一项是()A.Java中的每一个线程都属于某个线程组B.线程只能在其创建时设置所属的线程组C.线程创建之后,可以从一个线程组转移到另一个线程组D.新建的线程组默认情况下属于其父线程所属的线程组36.下列不属于线程组成部分的一项是()A. 程序计数器B. 堆栈C. 进程地址空间中的代码 C. 栈指针37.下列关于Java线程模型的说法中,错误的一项是()A.Java线程模型包括了计算机的CPUB.代码可以与其他线程共享C.数据可以被多个线程共享D.线程模型在ng.Thread类中被定义38.下列关于Thread类提供的线程控制方法的说法中,错误的一项是()A.在线程a中执行线程b的join()方法,则线程a等待直到b执行完成B.线程a通过调用interrupt()方法来中断其阻塞状态C.若线程a调用方法isAlive()返回值为true,则说明a正在执行中D.currentThread()方法返回当前线程的引用39.下面的哪一个关键字通常用来对对象加锁,从而使得对对象的访问是排他的?()A. serializeB. transientC. synchronizedD. static40.下列说法中错误的一项是()A.可串行化的类必须实现Serializable接口B.可串行化的类中的静态变量可以不被串行化C.private数据访问权限能够限制数据不被串行化D.对象串行化使用Java语言提供的默认机制41.下列说法中正确的一项是()A.代码和数据是进程的组成部分B.代码和数据是线程的组成部分C.进程是轻型线程D.线程中包含进程42.下列说法中错误的一项是()A.共享数据的所有访问都必须使用synchronized加锁B.共享数据的访问不一定全部使用synchronized加锁C.所有的对共享数据的访问都是临界区D.临界区必须使用synchronized标识43.下列有关线程的叙述中正确的一项是()A.一旦一个线程都创建,它就立即开始运行B.使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行C.当一个线程因为抢占机制而停止运行时,它被放在课运行队列的前面D.一个线程可能因为不同的原因停止并进入终止状态44.下列方法中,不属于Thread类提供的线程控制方法的一个是()A. sleep()B. interrupt()C. init()D. yield()45.实现Runnable接口创建一个线程的语句是()Thead t = new Thead (target)Thead t = new Thead ();t.target=targetThead t = new Thead ();T.start(target)Thead t = new Thead ();T.run(target)Thead类定义与下列哪一个包中?()A. java.ioB. ngC. java.utilD. java.awt46.下列说法中,错误的一项是()A.实现了Runnable接口的类,可以通过extends来继承其他的类B.实现了Runnable接口的类,不能继承其他的类C.Thread类的子类应该是关于CPU行为的类D.Thread类的子类也实现了Runnable接口47.下列是通过实现Runnable接口创建的类,其中正确的一项是()A. class A3 implements Runnable{void run(){//··········}}B. class A3 extends Runnable{public void run(){//··········}}C. class A3 implements Runnable{public void run(){//··········}}D. class A3 implements Runnable{//··········}48.Thread类的常量NORM_PRIORITY代表的优先级是()A.最低优先级B.普通优先级C.最高优先级D.不代表任何优先级50.下列哪一个包给出了Runnable接口的定义?()A. java.utilB. java.ioC. ngD. java.sql二、填空题1.线程模型在Java中是由________类进行定义和描述的。

相关文档
最新文档