Java第七单元练习题Java多线程机制(20210109223217)
Java多线程习题

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多线程期末考试题库单选题100道及答案解析

JAVA多线程期末考试题库单选题100道及答案解析1. 在Java 中,实现多线程有几种方式?()A. 2 种B. 3 种C. 4 种D. 5 种答案:B解析:实现多线程有三种方式:继承Thread 类、实现Runnable 接口、使用线程池的Callable 和Future 。
2. 以下哪个方法用于启动一个线程?()A. start()B. run()C. begin()D. execute()答案:A解析:调用线程对象的start() 方法启动线程,会自动调用run() 方法执行线程任务。
3. 以下关于线程和进程的说法,错误的是()A. 一个进程可以包含多个线程B. 线程是进程的执行单元C. 进程之间不能共享内存D. 线程之间可以独立运行答案:D解析:线程之间共享进程的内存空间,不是独立运行的。
4. 以下哪个方法可以让当前线程暂停一段时间?()A. sleep()B. wait()C. notify()D. yield()答案:A解析:Thread.sleep() 方法可以让当前线程暂停指定的时间。
5. 以下哪个方法用于线程间的等待/通知机制?()A. sleep() 和notify()B. wait() 和notify()C. yield() 和notifyAll()D. suspend() 和resume()答案:B解析:wait() 使当前线程等待,notify() 唤醒一个等待的线程,notifyAll() 唤醒所有等待的线程。
6. 以下关于线程同步的说法,错误的是()A. 可以使用synchronized 关键字实现线程同步B. 同步会降低程序的并发性C. 同步可以保证线程安全D. 所有方法都应该同步答案:D解析:不是所有方法都需要同步,只有在多个线程可能同时访问和修改共享资源时才需要同步。
7. 以下哪个不是线程的状态?()A. 就绪B. 运行C. 阻塞D. 结束E. 暂停答案:E解析:线程的状态包括就绪、运行、阻塞和结束。
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程序设计案例教程 习题答案 第7章 多线程

4new Thread (t,“陈老师“),start ();
5new Thread (t,“高老师"), start ();
6new Thread (t,“李老师”),start ();
7}
8)
9class Teacher implements Runnable {
第
1.Thread Runnable
2.新建状态(New)、就绪状态(Runnable)、运行状态(Running)
3.start()> run()方法
4.sleep()
5.synchronized二.判断
1.错2.错3.对4.对5,对6.错7.错8.对三.选择
l.C 2.B3.C4.C5.D 6.BC 7.C四.简答
10private int notes = 50;
11public void run () {
12while (true) {
13dispatchNotes ();
14if (notes <= 0){
15break;
16)
17}
18)
19private synchronized void dispatchNotes () {
1.一种是继承ng包下的Thread类,覆写Thread类的run()方法,在run()方法 中实现运行在线程上的代码。
1new Thread(){public void run () {}3}, start ();
另一种就是实现接口,同样是在run()方法中实现运行在线程上的代 码。
Threeadt2=newThread (r,"线程2:");
Java 多线程编程练习题及答案

Java 多线程编程练习题及答案一、多线程基础概念在开始进行Java多线程编程练习之前,首先需要了解一些多线程的基础概念。
1. 什么是线程?线程是计算机进程中的一个执行序列,可以独立运行,并与其他线程并发执行。
一个线程可以执行一个任务,它拥有自己的栈、程序计数器和本地变量等。
2. 为什么要使用多线程?多线程可以提高程序的执行效率,特别是在处理多任务时。
通过将多个任务拆分成多个线程,可以同时执行这些任务,从而加快整体的执行速度。
3. 如何创建线程?在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。
通过继承Thread类,需要重写run方法来定义线程的执行逻辑;通过实现Runnable接口,则需要实现run方法,并将Runnable对象传递给Thread类进行线程的创建。
二、多线程编程练习题现在,我们来进行一些多线程编程练习题,以巩固对多线程概念和编程的理解。
1. 编写一个程序,创建两个线程并使它们交替输出1-100的数字。
提示:可以使用一个标志变量来判断当前是哪个线程在执行,并使用synchronized关键字来保证线程之间的同步。
2. 编写一个程序,创建三个线程A、B和C,使它们运行10次,每次分别输出A、B和C,并等待随机时间后继续执行下一次。
提示:可以使用Thread.sleep()方法来模拟线程等待的时间。
3. 编写一个程序,模拟银行存取款操作。
创建两个线程,一个线程负责存款,另一个线程负责取款。
初始银行账户余额为1000元,存款线程每次存100元,取款线程每次取200元,两个线程分别执行10次。
提示:可以使用wait()和notify()方法来实现线程之间的等待和唤醒操作。
三、多线程编程练习答案下面是上述多线程编程练习题的答案,供参考。
1.```public class AlternatePrinting implements Runnable {private static int count = 1;private static final Object lock = new Object();private final int threadId;private final int totalThreads;private final int maxCount;public AlternatePrinting(int threadId, int totalThreads, int maxCount) {this.threadId = threadId;this.totalThreads = totalThreads;this.maxCount = maxCount;}@Overridepublic void run() {while (true) {synchronized (lock) {if (count > maxCount) {break;}if (count % totalThreads == threadId - 1) {System.out.println("Thread " + threadId + ": " + count);count++;} else {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}lock.notifyAll();}}}public static void main(String[] args) {int totalThreads = 2;int maxCount = 100;for (int i = 1; i <= totalThreads; i++) {new Thread(new AlternatePrinting(i, totalThreads, maxCount)).start();}}}```2.```public class ABCPrinting implements Runnable { private static final Object lock = new Object();private static String turn = "A";private final String name;private final int maxPrints;public ABCPrinting(String name, int maxPrints) { = name;this.maxPrints = maxPrints;}@Overridepublic void run() {int prints = 0;while (prints < maxPrints) {synchronized (lock) {try {while (!turn.equals(name)) {lock.wait();}System.out.println(name);prints++;if (turn.equals("A")) {turn = "B";} else if (turn.equals("B")) {turn = "C";} else {turn = "A";}lock.notifyAll();Thread.sleep((long) (Math.random() * 1000)); } catch (InterruptedException e) {e.printStackTrace();}}}}public static void main(String[] args) {int maxPrints = 10;new Thread(new ABCPrinting("A", maxPrints)).start(); new Thread(new ABCPrinting("B", maxPrints)).start(); new Thread(new ABCPrinting("C", maxPrints)).start(); }}```3.```public class BankOperation {private static final Object lock = new Object();private static int balance = 1000;public static void main(String[] args) {int numDeposits = 10;int numWithdrawals = 10;Thread depositThread = new Thread(() -> {for (int i = 0; i < numDeposits; i++) {synchronized (lock) {balance += 100;System.out.println("Deposit: 100, balance: " + balance);lock.notifyAll();}}});Thread withdrawalThread = new Thread(() -> {for (int i = 0; i < numWithdrawals; i++) {synchronized (lock) {if (balance < 200) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}balance -= 200;System.out.println("Withdrawal: 200, balance: " + balance); }}});depositThread.start();withdrawalThread.start();}}```四、总结在本篇文章中,我们通过多线程编程练习题的方式掌握了Java多线程的基础概念和编程技巧。
java多线程试题_答案

java多线程试题_答案多线程一.选择题1.下列说法中错误的一项是(A)A.线程就是程序B.线程是一个程序的单个执行流B.多线程是指一个程序的多个执行流D.多线程用于实现并发2.下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态(D)A.等待阴塞状态下的线程被notify()唤B.等待阻塞状态下的纯种被interrput()中断C.等待时间到D.等待阻塞状态下的线程调用wait()方法3.下列哪个方法可以使线程从运行状态进入其他阻塞状态(A)A.sleepB.waitC.yieldD.start4.下列说法中错误的一项是(D)A.一个线程是一个Thread类的实例B.线程从传递给纯种的Runnable实例run()方法开始执行C.线程操作的数据来自Runnable实例D.新建的线程调用start()方法就能立即进入运行状态5.下列关于Thread类提供的线程控制方法的说法中,错误的一项是(D)A.在线程A中执行线程B的join()方法,则线程A等待直到B执行完成B.线程A通过调用interrupt()方法来中断其阻塞状态C.若线程A调用方法isAlive()返回值为true,则说明A正在执行中D.currentThread()方法返回当前线程的引用6.下列说法中,错误的一项是()A.对象锁在synchronized()语句执行完之后由持有它的线程返还B.对象锁在synchronized()语句中出现异常时由持有它的线程返还C.当持有锁的线程调用了该对象的wait()方法时,线程将释放其持有的锁D.当持有锁的线程调用了该对象的构造方法时,线程将释放其持有的锁7.下面的哪一个关键字通常用来对对象的加锁,从而使得对对象的访问是排他的 AA.sirialize B transient C synchronized D static二.填空题1. 在操作系统中,被称做轻型的进程是线程2. 多线程程序设计的含义是可以将一个程序任务分成几个并行的任务3. 在Java程序中,run()方法的实现有两种方式:实现Runnable 接口和继承Thread类4 .多个线程并发执行时,各个线程中语句的执行顺序是确定的,但是线程之间的相对执行顺序是不确定的6.Java中的对象锁是一种独占的排他锁7.程序中可能出现一种情况:多个线种互相等待对方持有的锁,而在得到对方的锁之前都不会释放自己的锁,这就是死锁8.线程的优先级是在Thread类的常数MIN_PRIORITY 和MAX_PRIORITY之间的一个值9.处于新建状态的线程可以使用的控制方法是start() 和stop() 。
java多线程练习题

java多线程练习题Java多线程编程练习题[]选择题1.编写线程类,要继承的父类是:A:ObjectB:RunnableC:SerializableD:ThreadE:E某ception答2.编写线程类,可以通过实现那个接口来实现?A:RunnableB:ThrowableC:SerializableE:Cloneable答:3.什么方法用于终止一个线程的运行?A:leepB:joinC:waitD:topE:notify答:4.一个线程通过什么方法将处理器让给另一个优先级别相同的线程?A:waitB:yieldC:joinD:leepE:top答:5.如果要一个线程等待一段时间后再恢复执行此线程,需要调用什么方法?A:waitB:yieldC:joinD:leepE:topF:notify答:6.什么方法使等待队列中的第一个线程进入就绪状态?A:waitB:yieldC:joinD:leepE:topF:notify答:7.Runnable接口定义了如下哪些方法?A:tart()B:top()C:reume()D:run()E:upend()答:8.如下代码创建一个新线程并启动线程:Runnabletarget=newMyRunnable();ThreadmyThread=newThread(target);问:如下哪些类可以创建target对象,并能编译正确?A:publicclaMyRunnablee某tendRunnable{publicvoidrun(){}} B:publicclaMyRunnablee某tendObject{publicvoidrun(){}}C:publicclaMyRunnableimplementRunnable{publicvoidrun(){}} D:publicclaMyRunnablee某tendRunnable{voidrun(){}}E:publicclaMyRunnableimplementRunnable{voidrun(){}}答:9.给出代码如下:publicclaMyRunnableimplementRunnable{publicvoidrun(){--------------------------------}}问在虚线处,如下哪些代码可以创建并启动线程?A:newRunnable(MyRunnable).tart();B:newThread(MyRunnable).run();C:newThread(newMyRunnable()).tart();D:newMyRunnable().tart();答:[]问答题1.线程和进程有什么区别?2.Java创建线程的方式有哪些?[]编程题1.编写多线程应用程序,模拟多个人通过一个山洞的模拟。
多线程练习题目

多线程一、单项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 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.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.( )关键字可以对对象加互斥锁。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7 Java 多线程机制
7.1 单项选择题
1. 线程调用了sleep ()方法后,该线程将进入( )状态。
A. 可运行状态
B. 运行状态
C. 阻塞状态
D. 终止状态
2. 关于java 线程,下面说法错误的是()
A. 线程是以CPU为主体的行为
B. java 利用线程使整个系统成为异步
C. 创建线程的方法有两种:实现Runnable 接口和继承Thread 类
D. 新线程一旦被创建,它将自动开始运行
3. 在java 中的线程模型包含()
A. 一个虚拟处理器
B. CPU执行的代码
C. 代码操作的数据
D. 以上都是
4. 在java 语言中,临界区可以是一个语句块,或者是一个方法,并用()关键字标识。
A. synchronized
B. include
C. import
D. Thread
5. 线程控制方法中,yield()的作用是()
A. 返回当前线程的引用
B. 使比其低的优先级线程执行
C. 强行终止线程
D. 只让给同优先级线程运行
6. 线程同步中,对象的锁在()情况下持有线程返回
A. 当synchronized()语句块执行完后
B. 当在synchronized()语句块执行中出现例外( exception )时
C. 当持有锁的线程调用该对象的wait()方法时
D. 以上都是
7. 在以下()情况下,线程就进入可运行状态
A. 线程调用了sleep()方法时
B. 线程调用了join()方法时
C. 线程调用了yield()方法时
D. 以上都是
8. java 用()机制实现了进程之间的异步执行
A. 监视器
B. 虚拟机
C. 多个CPU
D. 异步调用
9. Thread 类的方法中,toString() 方法的作用是()
A. 只返回线程的名称
B. 返回当前线程所属的线程组的名称
C. 返回当前线程对象
D. 返回线程的名称
10. J ava 语言具有许多优点和特点,下列选项中,哪个反映了Java 程序并行机制的特点( )
A. 安全性
B. 多线程
C. 跨平台
D. 可移值
11. 以下哪个关键字可以用来对对象加互斥锁(
)
A. transient
B. synchronized
C. serialize
D. static
12. 下面关于进程、线程的说法不正确的是( )。
A. 进程是程序的一次动态执行过程。
一个进程在其执行过程中,可以产生多个线程一一多线程,形成多条执行线索。
B. 线程是比进程更小的执行单位,是在一个进程中独立的控制流,即程序内部的控制流。
线程本身不能自动运行,栖身于某个进程之中,由进程启动执行。
C. Java多线程的运行与平台无关。
D. 对于单处理器系统,多个线程分时间片获取
CPU或其他系统资源来运行。
对于多处理器系统,线程可以分配到多个处理器中,从而真正的并发执行多任务。
7.2 填空题
1. _______ 是java 程序的并发机制,它能同步共享数据、处理不同的事件。
2. 线程是程序中的一个执行流,一个执行流是由CPU 运行程序的代码、________________ 所形
成的,因此,线程被认为是以CPU为主体的行为。
3. 线程的终止一般可以通过两种方法实现:自然撤销或者是_______________ .
4. 线程模型在java中是由____________ 类进行定义和描述的。
5. 线程的创建有两种方法:实现 __________ 接口和继承Thread 类。
6. 多线程程序设计的含义是可以将程序任务分成几个____________ 的子任务。
7. 按照线程的模型,一个具体的线程也是由虚拟的CPU代码与数据组成,其中代码与数
据构成了___________ ,线程的行为由它决定。
8. ava中,新建的线程调用start()方法、如myThread.start(),将使线程的状态从New(新建状
态) 转换为 _______ 。
9. 多线程是java 程序的________ 机制,它能同步共享数据,处理不同事件。
10. 进程是由代码、数据、内核状态和一组寄存器组成,而线程是表示程序运行状态的,如程序计
数器、栈指针以及堆栈组成。
11. Thread 类提供了一系列基本线程控制方法,如果我们需要让与当前进程具有相同优先
级的线程也有运行的机会则可以调用___________ 方法。
12. 在多线程系统中,多个线程之间有 __________ 和互斥两种关系。
13. 在一个时间只能由一个线程访问的资源称为临界资源,访问临界资源的代码
7.3 判断题
1. 一个Java多线程的程序不论在什么计算机上运行,其结果始终是一样的。
(x )
2. Java 线程有五种不同的状态,这五种状态中的任何两种状态之间都可以相互转换。
( x )
3. 所谓线程同步就是若干个线程都需要使用同一个synchronized修饰的方法。
(V )
4. 使用Thread 子类创建线程的优点是可以在子类中增加新的成员变量,使线程具有某种
属性,也可以在子类中新增加方法,使线程具有某种功能。
但是,Java不支持多继承,Thread 类的子类不能再扩展其他的类。
(V )
5. Java虚拟机(JVM)中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别,
分别用Thread类中的类常量表示。
每个Java线程的优先级都在常数1和10之间,即
Thread.MIN_PRIORIT丫和Thread.MAX_PRIORIT丫之间。
如果没有明确地设置线程的优先级别,每个线程的优先级都为常数8。
(x )
6. 当线程类所定义的run()方法执行完毕,线程的运行就会终止。
(V )
7. 线程的启动是通过引用其start()方法而实现的。
(V )
7.4 简答题
1. 同步和异步有何异同,在什么情况下分别使用他们举例说明
2. 在Java 中,怎样创建一个线程
7.5 参考答案
7.5.1 单项选择题:
1. C
2.D
3.D
4.A
5.D
6.D
7.C
8.A
9.D 10.B
11.B 12.C
7.5.2 填空题
1. 多线程
2. 操纵程序的数据
3. 被停止
5. Runnable
6. 并行
7. 线程体
8. 可运行状态
9. 并发
10. 寄存器
11. yield()
12. 同步
13. 临界代码
7.5.3 判断题
1. X
2. X
3.V
4.V
5. X
6. V
7. V
7.5.4 简答题
1. 同步和异步有何异同,在什么情况下分别使用他们举例说明。
如果数据将在线程间共享。
例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
2. 在Java 中,怎样创建一个线程
答:
方法一:定义类来实现Runnable 接口
class TestThread implements Runnable {
public void run() { …}
}
方法二:继承Thread 类来实现
class TestThread extends Thread {
TestThread(String name) {
super(name);
start();
}
public void run() { …}
}。