java多线程 练习

合集下载

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、下面哪个方法可以在任何时候被任何线程调用? ()

进程线程练习题

进程线程练习题

进程线程练习题一、选择题1. 进程是指()。

a) 线程的集合b) 代码的集合c) 资源的集合d) 程序的集合2. 线程是指()。

a) 进程的集合b) 代码的集合c) 资源的集合d) 程序的集合3. 在操作系统中,多个进程可以通过()来实现并发执行。

a) 共享内存b) 进程间通信c) 线程d) 同步操作4. 下列关于进程和线程的说法中,错误的是()。

a) 进程是资源分配的最小单位b) 线程是程序执行的最小单位c) 进程之间是相互独立的d) 线程之间共享内存空间5. 在Java中,可以创建线程的两种方式是()。

a) 继承Thread类、实现Runnable接口b) 实现Thread类、继承Runnable接口c) 实现Thread接口、继承Runnable类d) 继承Thread类、实现Callable接口二、填空题1. 进程间通信的方式有()。

2. 线程可以共享的资源有()。

3. 线程调度的方式包括()和()。

三、简答题1. 请简述进程和线程的概念及区别。

2. 进程间通信的方式有哪些,各自的优缺点是什么?3. 线程调度的方式有哪些,各自的优缺点是什么?4. 请举例说明多线程的优势以及适用场景。

四、编程题请使用Java语言编写一个多线程程序,实现以下功能:1. 创建两个线程T1和T2,分别打印出1~5和6~10的数字。

2. 要求线程T1和T2交替执行,即先打印数字1,然后打印数字6,接着打印数字2,再打印数字7,以此类推。

3. 在程序中使用合适的同步机制来实现线程的交替执行。

答案:一、选择题1. a) 线程的集合2. b) 代码的集合3. b) 进程间通信4. d) 线程之间共享内存空间5. a) 继承Thread类、实现Runnable接口二、填空题1. 管道通信、消息队列、共享内存、信号量、套接字通信等2. 内存空间3. 抢占式调度、协同式调度三、简答题1. 进程是操作系统进行资源分配和调度的基本单位。

JAVA 练习题第12章--java多线程机制

JAVA 练习题第12章--java多线程机制

连续输出10次带标号的“Hello!”


{
while(i++<10) { System.out.print(i+":Hello");


}
}

写出以下程序的功能: class TEST implements Runnable { public static void main(String args[]) {


TEST t=new TEST();
Thread tt=new Thread(t); tt.start(); }
改后才能符合A线程的需要,这时线程A就要等待 线程B完成修改工作,这种现象称为( ) A、线程的同步 B、线程的互斥 C、线程的调度 D、线程的就绪
A
最常使用的多线程实现方法是__________。
A、继承Thread类
B、继承Threader类 C、使用Runnable接口 D、使用Thread接口
C
线程在,新建和____
____状态调用isAlive()方法
返回的值是false。
死亡
7.在Java中,创建线程的方法有两种:
一种方法是通过(
另一种方法是通过(
)来实现, )来实现。
创建 Thread 类的子类 实现 Runnable 接口的类
8.(
)将启动线程对象,使之从新建状态转 入就绪状态并进入就绪队列排队。

Βιβλιοθήκη )。 A.线程一旦创建,则立即自动执行 B.线程创建后需要调用start()方法,将线程置于 可运行状态 C.调用线程的start()方法后,线程也不一定立即 执行 D.线程处于可运行状态,意味着它可以被调度 【解析】线程创建后需要调用start()方法,将线程 置于可运行状态。

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 关键字来保证线程安全性,用于返回当前的计数值。

java多线程练习题

java多线程练习题

java多线程练习题在Java编程中,多线程是一个非常重要的概念,它允许程序同时执行多个任务,提高程序的效率和响应性。

以下是一些Java多线程的练习题,可以帮助你更好地理解和掌握多线程的概念和应用。

# 练习题1:线程的创建和启动编写一个Java程序,创建一个继承自Thread类的子类,并重写run 方法。

然后创建该子类的实例,并启动线程。

```javaclass MyThread extends Thread {public void run() {System.out.println("线程启动了!");}}public class Main {public static void main(String[] args) {MyThread thread = new MyThread();thread.start();}}```# 练习题2:线程的同步编写一个Java程序,模拟两个线程交替打印1到10的数字。

使用同步方法或同步代码块来保证线程安全。

```javaclass Counter {private int count = 1;public synchronized void increment() {System.out.println(Thread.currentThread().getName() + "打印了:" + count);count++;}}public class Main {public static void main(String[] args) {Counter counter = new Counter();Thread thread1 = new Thread(() -> {for (int i = 0; i < 5; i++) {counter.increment();}});Thread thread2 = new Thread(() -> {for (int i = 0; i < 5; i++) {counter.increment();}});thread1.start();thread2.start();}}```# 练习题3:使用wait和notify编写一个Java程序,模拟生产者和消费者问题。

java基础编程练习题

java基础编程练习题

Java基础编程练习题一、基本语法1. 编写一个Java程序,输出“Hello, World!”。

2. 声明一个整型变量并赋值为10,然后输出该变量的值。

3. 编写一个Java程序,实现两个整数的加、减、乘、除运算。

4. 编写一个Java程序,判断一个整数是奇数还是偶数。

5. 编写一个Java程序,交换两个变量的值。

二、控制结构1. 使用ifelse语句判断一个年份是否为闰年。

2. 编写一个Java程序,使用for循环输出1到100的所有偶数。

3. 使用while循环计算1+2+3++100的和。

4. 编写一个Java程序,使用dowhile循环输出1到10的所有整数。

5. 使用switch语句实现一个简单的计算器程序,支持加、减、乘、除四种运算。

三、数组1. 声明一个整型数组,并初始化为{1, 2, 3, 4, 5},然后输出数组中的每个元素。

2. 编写一个Java程序,计算数组中所有元素的和。

3. 实现一个方法,用于查找数组中的最大值。

4. 编写一个Java程序,将一个字符串数组按照字母顺序排序。

5. 使用二维数组输出一个5x5的乘法表。

四、字符串操作1. 编写一个Java程序,连接两个字符串。

2. 实现一个方法,判断一个字符串是否为回文。

3. 编写一个Java程序,将字符串中的所有小写字母转换为大写字母。

4. 使用StringBuilder类实现字符串的逆序输出。

5. 编写一个Java程序,计算一个字符串中某个字符出现的次数。

五、面向对象基础1. 创建一个名为Person的类,包含姓名、年龄和性别属性,并提供相应的构造方法和getter/setter方法。

2. 编写一个Java程序,实现两个Person对象的比较(按年龄比较)。

3. 创建一个Student类,继承自Person类,并添加成绩属性。

4. 编写一个Java程序,实现Student类的多态。

5. 创建一个接口Animal,包含吃、睡觉和叫三个方法,然后创建两个类Dog和Cat实现该接口。

java多线程学习基础篇(三)Thread类的常用方法

java多线程学习基础篇(三)Thread类的常用方法

java多线程学习基础篇(三)Thread类的常⽤⽅法线程Thread是⼀个程序的多个执⾏路径,执⾏调度的单位,依托于进程存在。

线程不仅可以共享进程的内存,⽽且还拥有⼀个属于⾃⼰的内存空间,这段内存空间也叫做线程栈,是在建⽴线程时由系统分配的,主要⽤来保存线程内部所使⽤的数据,如线程执⾏函数中所定义的变量。

Java中的多线程是⼀种抢占机制⽽不是分时机制。

抢占机制指的是有多个线程处于可运⾏状态,但是只允许⼀个线程在运⾏,他们通过竞争的⽅式抢占CPU。

下⾯介绍⼀些常⽤的Thread⽅法。

Thread.join():静态⽅法,返回对当前正在执⾏的线程对象的引⽤在很多情况下,主线程⽣成并起动了⼦线程,如果⼦线程⾥要进⾏⼤量的耗时的运算,主线程往往将于⼦线程之前结束,但是如果主线程处理完其他的事务后,需要⽤到⼦线程的处理结果,也就是主线程需要等待⼦线程执⾏完成之后再结束,这个时候就要⽤到join()⽅法了。

Join⽅法实现是通过wait(⼩提⽰:Object 提供的⽅法)。

当main线程调⽤t.join时候,main线程会获得线程对象t的锁(wait 意味着拿到该对象的锁),调⽤该对象的wait(等待时间),直到该对象唤醒main线程,⽐如退出后。

这就意味着main 线程调⽤t.join时,必须能够拿到线程t对象的锁。

join() ⼀共有三个重载版本,分别是⽆参、⼀个参数、两个参数:public final void join() throws InterruptedException; //⽆参数的join()等价于join(0),作⽤是⼀直等待该线程死亡public final synchronized void join(long millis) throws InterruptedException; //最多等待该线程死亡millis毫秒public final synchronized void join(long millis, int nanos) throws InterruptedException; //最多等待该线程死亡millis毫秒加nanos纳秒(1) 三个⽅法都被final修饰,⽆法被⼦类重写。

java中实现多线程的方法

java中实现多线程的方法

java中实现多线程的方法Java是一种非常强大的编程语言,它支持多线程,这是Java的一个重要特性。

多线程允许同时执行多个任务,从而大大提高了应用程序的效率和性能。

在Java中实现多线程的方法有很多种,下面我们将一步步地阐述这些方法。

第一种方法是继承Thread类。

我们可以在Java中创建一个继承Thread类的子类,并在子类中实现run()方法。

在run()方法中编写多线程代码。

以下是示例代码:```class MyThread extends Thread {public void run() {//多线程代码}}```在上述代码中,我们创建了一个名为MyThread的子类,并重写了Thread类的run()方法。

第二种方法是实现Runnable接口。

这种方法需要创建一个实现Runnable接口的类,然后实例化一个Thread对象并将实现Runnable 接口的类作为参数传递给Thread对象。

以下是示例代码:class MyRunnable implements Runnable {public void run() {//多线程代码}}public class Main {public static void main(String[] args) {MyRunnable obj = new MyRunnable();Thread thread = new Thread(obj);thread.start();}}```在上述代码中,我们创建了一个名为MyRunnable的类,并实现了Runnable接口。

我们在主类中创建了一个MyRunnable对象,并通过传递该对象作为参数创建了一个Thread对象。

最后启动线程。

第三种方法是使用匿名内部类。

这种方法可以减少代码的数量。

以下是示例代码:```public class Main {public static void main(String[] args) {new Thread(new Runnable() {public void run() {//多线程代码}}).start();}```在上述代码中,我们使用匿名内部类创建了一个Runnable对象并启动了一个线程。

java多线程练习题

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.编写多线程应用程序,模拟多个人通过一个山洞的模拟。

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

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

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. synchronizedB. includeC. importD. Thread5. 线程控制方法中,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. 多个CPUD. 异步调用9. Thread 类的方法中,toString() 方法的作用是()A. 只返回线程的名称B. 返回当前线程所属的线程组的名称C. 返回当前线程对象D. 返回线程的名称10. J ava 语言具有许多优点和特点,下列选项中,哪个反映了Java 程序并行机制的特点( )A. 安全性B. 多线程C. 跨平台D. 可移值11. 以下哪个关键字可以用来对对象加互斥锁()A. transientB. synchronizedC. serializeD. static12. 下面关于进程、线程的说法不正确的是( )。

java 多线程练习题

java 多线程练习题

java 多线程练习题Java多线程练习题在Java中,多线程是非常常见和重要的概念。

通过使用多线程,我们可以实现并发处理和同时执行多个任务。

为了熟悉和掌握多线程的用法,下面将给出一些Java多线程的练习题。

1. 编写一个Java程序,创建两个线程,分别输出从1到50和从51到100的数字。

确保两个线程交替输出数字,即输出的结果应为:1,51,2,52,3,53...,99,100。

2. 编写一个Java程序,创建三个线程,分别输出字符A、字符B和字符C。

确保三个线程按顺序交替输出字符,即输出的结果应为:ABCABCABC...3. 编写一个Java程序,模拟购票系统。

假设有100张票,多个窗口同时售票,要求保证售出的票没有重复,即每张票只能卖给一个人。

4. 编写一个Java程序,使用多线程实现生产者-消费者模型。

假设有一个信号灯,生产者线程可以向信号灯放置数据,消费者线程可以从信号灯中取走数据。

要求生产者线程和消费者线程交替执行,确保生产者放置数据后,消费者才能取走数据。

5. 编写一个Java程序,使用多线程计算1到100之间所有数字的和。

要求将任务分成10个子任务,由10个线程并行地执行,并最后将子任务的计算结果合并得到最终结果。

6. 编写一个Java程序,实现一个简单的线程池。

线程池中包含固定数量的线程,多余的任务将会排队等待执行。

当新的任务到达时,如果有空闲线程,则立即执行,否则任务将会进入等待队列。

以上是一些Java多线程的练习题,通过完成这些练习题,您将熟悉和掌握多线程的基本用法和常见应用场景。

希望这些练习题对您的学习和实践有所帮助!。

java多线程习题

java多线程习题

一、选择题1.下列说法中,正确的一项是(A )。

A.单处理机的计算机上,2个线程实际上不能并发执行B.单处理机的计算机上,2个线程实际上能够并发执行C.一个线程可以包含多个进程D.一个进程只能包含一个线程2.下列说法中,错误的一项是( A )。

A.线程就是程序B.线程是一个程序的单个执行流C.多线程是指一个程序的多个执行流D.多线程用于实现并发3.下列关于Thread类的线程控制方法的说法中错误的一项是()。

A.线程可以通过调用sleep()方法使比当前线程优先级低的线程运行B.线程可以通过调用yield()方法使和当前线程优先级一样的线程运行C.线程的sleep()方法调用结束后,该线程进入运行状态D.若没有相同优先级的线程处于可运行状态,线程调用yield()方法时,当前线程将继续执行5.下面的哪一个关键字通常用来对对象加锁,从而使得对对象的访问是排他的( C )?A.serialize B.transient C.synchronized D.static6.下列说法中,错误的一项是(A )。

A.线程一旦创建,则立即自动执行B.线程创建后需要调用start()方法,将线程置于可运行状态C.调用线程的start()方法后,线程也不一定立即执行D.线程处于可运行状态,意味着它可以被调度7.下列说法中,错误的一项是()。

A.Thread类中没有定义run()方法B.可以通过继承Thread类来创建线程C.Runnable接口中定义了run()方法D.可以通过实现Runnable接口创建线程【解析】Thread类和Runnable接口中都定义了run()方法,而start()方法只有Thread类中进行了定义,而Runnable接口中没有定义。

8.Thread类定义在下列哪个包中()?A.java.io B.ng C.java.util D.java.awt 9.Thread类的常量NORM_PRIORITY代表的优先级是()。

15个顶级Java多线程面试题及答案

15个顶级Java多线程面试题及答案

15 个顶级 Java 多线程面试题及答案1)此刻有 T1、T2、 T3 三个线程,你如何保证 T2 在 T1 履行完后履行, T3 在 T2 履行完后履行这个线程问题往常会在第一轮或电话面试阶段被问到,目的是检测你对”join ”方法能否熟悉。

这个多线程问题比较简单,能够用join 方法实现。

2)在 Java 中 Lock 接口比 synchronized 块的优势是什么你需要实现一个高效的缓存,它允很多个用户读,但只同意一个用户写,以此来保持它的完好性,你会如何去实现它lock 接口在多线程和并发编程中最大的优势是它们为读和写分别供给了锁,它能知足你写像ConcurrentHashMap 这样的高性能数据构造和有条件的堵塞。

Java 线程面试的问题愈来愈会依据面试者的回答来发问。

我激烈建议在你去参加多线程的面试以前仔细读一下Locks,因为目前其大批用于建立电子交易终统的客户端缓存和交易连结空间。

3)在 java 中 wait 和 sleep 方法的不一样往常会在电话面试中常常被问到的Java线程面试问题。

最大的不一样是在等候时wait 会开释锁,而 sleep 向来拥有锁。

Wait 往常被用于线程间交互,sleep 往常被用于暂停履行。

4)用 Java 实现堵塞行列。

这是一个相对困难的多线程面试问题,它能达到好多的目的。

第一,它能够检测侯选者能否能实质的用 Java 线程写程序;第二,能够检测侯选者对并发场景的理解,而且你能够依据这个问好多问题。

假如他用 wait() 和 notify() 方法来实现堵塞行列,你能够要求他用最新的Java 5中的并发类来再写一次。

5)用 Java 写代码来解决生产者——花费者问题。

与上边的问题很近似,但这个问题更经典,有些时候面试都会问下边的问题。

在Java中怎么解决生产者——花费者问题,自然有好多解决方法,我已经分享了一种用堵塞行列实现的方法。

有些时候他们甚至会问怎么实现哲学家进餐问题。

java练习题

java练习题

Java练习题一、基本语法1. 编写一个Java程序,输出“Hello, World!”。

2. 声明一个整型变量并赋值为10,然后输出该变量的值。

3. 编写一个Java程序,实现两个整数的加、减、乘、除运算。

4. 声明一个浮点型变量并赋值为3.14,然后输出该变量的值。

5. 编写一个Java程序,判断一个整数是奇数还是偶数。

6. 使用三元运算符计算两个整数中的较大值。

7. 编写一个Java程序,实现字符串的拼接。

8. 声明一个布尔型变量并赋值为true,然后输出该变量的值。

9. 编写一个Java程序,输出1到100的所有偶数。

10. 使用for循环输出九九乘法表。

二、数组与字符串1. 声明一个整型数组并初始化,然后输出数组中的所有元素。

2. 编写一个Java程序,实现数组的逆序输出。

3. 计算一个整型数组的平均值。

4. 编写一个Java程序,查找数组中的最大值和最小值。

5. 使用冒泡排序算法对整型数组进行排序。

6. 编写一个Java程序,实现字符串的反转。

7. 判断一个字符串是否为回文。

8. 输出一个字符串中字母和数字的个数。

9. 编写一个Java程序,实现字符串的截取。

10. 使用StringBuilder类拼接一个由100个“Java”组成的字符串。

三、面向对象1. 定义一个学生类(Student),包含姓名、年龄和成绩属性,并实现一个打印学生信息的方法。

2. 编写一个Java程序,创建一个学生对象并设置其属性,然后调用打印学生信息的方法。

3. 定义一个矩形类(Rectangle),包含长和宽属性,并实现计算面积和周长的方法。

4. 编写一个Java程序,创建两个矩形对象,并比较它们的面积大小。

5. 定义一个动物类(Animal),包含吃、睡和叫的方法,然后创建一个狗类(Dog)继承动物类,并重写叫的方法。

6. 编写一个Java程序,演示多态性,创建一个动物数组,包含狗和猫对象,并调用它们的叫方法。

Java多线程编程技巧详解

Java多线程编程技巧详解

Java多线程编程技巧详解Java是一种广泛使用的编程语言,而多线程编程则是Java中一个重要的开发领域。

在多线程编程中,开发者需要了解并掌握一定的技巧,以避免线程之间的冲突和死锁等问题。

本文将详细介绍Java多线程编程的常用技巧,帮助开发者轻松掌握多线程编程的精髓。

一、线程的创建与启动1. 继承Thread类创建线程:直接继承Thread类,并覆盖run()方法实现线程主体。

```public class MyThread extends Thread{public void run(){//线程执行体}}MyThread myThread = new MyThread();myThread.start();```2. 实现Runnable接口创建线程:实现Runnable接口,并在类中实例化一个Thread对象。

```public class MyRunnable implements Runnable{public void run(){//线程执行体}}MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();```二、线程的处理与管理1. 同步方法:synchronized关键字用于保护共享数据不被多个线程同时访问。

```public class SynchronizedDemo implements Runnable {private int count;public synchronized void run() {for(int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName()+":"+(count++));}}}SynchronizedDemo target = new SynchronizedDemo();Thread thread1 = new Thread(target, "A");Thread thread2 = new Thread(target, "B");thread1.start();thread2.start();```2. 锁对象:使用互斥锁对象来控制线程访问共享资源的方式。

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)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多线程习题知识点:Java的多线程,实现多线程的两种方法,线程控制、调度方法一、选择题1、什么原因可导致线程停止执行。

()A.线程调用了 wait()方法;B.线程调用了yield()方法;C.线程调用了 pause()方法;D.线程调用了 sleep() 方法。

2、哪个方法是实现Runnable接口所需的?A.wait() B.run() C.stop() D.update() E.resume() 3、以下代码的调试结果为?()public class Bground extends Thread{public static void main(String argv[]){Bground b = new Bground();b.run();}public void start(){for (int i = 0; i <10; i++){System.out.println("Value of i = " + i);}}}A.编译错误,没有定义线程的run方法;B.由于没有定义线程的run方法,而出现运行错误;C. 编译通过,运行输出 values 0 to 9D. 编译通过,运行无输出4、有关线程的叙述正确的有:()A.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。

B. 可以获得对任何对象的互斥锁定。

C. 线程通过调用对象的synchronized 方法可取得对象的互斥锁定。

D. 线程调度算法是平台独立的。

5、以下哪个是线程类的方法?A.yield()B. sleep(long msec)C. go()D. stop()6、以下哪个最准确描述synchronized关键字?A.允许两线程并行运行,而且互相通信;B. 保证在某时刻只有一个线程可访问方法或对象;C. 保证允许两个或更多处理同时开始和结束;D. 保证两个或更多线程同时开始和结束。

多线程练习题目

多线程练习题目

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

1.如果线程死亡,它便不能运行。

(T)
2.在Java中,高优先级的可运行线程会抢占低优先级线程。

(T )
3.线程可以用yield方法使低优先级的线程运行。

(F)
4...程序开发者必须创建一个线程去管理内存的分配。

(F)
5.一个线程在调用它的start方法,之前,该线程将一直处于出生期。

(T)
6.当调用一个正在进行线程的stop( )方法时,该线程便会进入休眠状态。

(F)
7.一个线程可以调用yield方法使其他线程有机会运行。

(T)
二、选择题
1.Java语言中提供了一个▁D▁线程,自动回收动态分配的内存。

A.异步
B.消费者
C.守护
D.垃圾收集
2.Java语言避免了大多数的▁C▁错误。

A.数组下标越界
B.算术溢出
C.内存泄露
D.非法的方法参数
3.有三种原因可以导致线程不能运行,它们是▁ACD▁▁。

A.等待
B.阻塞
C.休眠
D.挂起及由于I/O操作而阻塞
4.当▁A方法终止时,能使线程进入死亡状态。

A.run
B.setPrority
C.yield
D.sleep
5.用▁B▁方法可以改变线程的优先级。

A.run
B.setPrority
C.yield
D.sleep
6.线程通过▁C▁方法可以使具有相同优先级线程获得处理器。

A.run
B.setPrority
C.yield
D.sleep
7.线程通过▁D▁方法可以休眠一段时间,然后恢复运行。

A.run
B.setPrority
C.yield
8.方法resume( )负责重新开始▁D▁线程的执行。

A.被stop( )方法停止
B.被sleep( )方法停止
C.被wait( )方法停止
D.被suspend( )方法停止
9.▁BCD▁方法可以用来暂时停止当前线程的运行。

A.stop( )
B.sleep( )
C.wait( )
D.suspend( )
三、简述题
1.简述程序、进程和线程之间的关系?什么是多线程程序?
答:程序是一段静态的代码,它是应用软件执行的蓝本。

进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程。

这个过程也是进程本身从产生、发展、到消亡的过程。

线程是比进程更小的单位。

一个进程在其执行过程中,可以产生多个线程,形成多个执行流。

每个执行流即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。

多线程程序是指一个程序中包含多个执行流。

2.线程有哪几个基本状态?它们之间如何转化?简述线程的生命周期。

答:新建状态,可运行状态,运行状态,阻碍状态,终止状态。

对线程调用各种控制方法,就使线程从一种状态转换到另一种状态。

线程的生命周期从新建开始,在可运行、运行和其他阻碍中循环,在可运行、运行、对象锁阻塞、等待阻塞中循环,最终在运行后run()方法结束后终止。

3.什么是线程调度?Java的线程调度采用什么策略?
答:在单个CPU上以某种顺序运行多个线程,称为线程的调度。

Java的线程调度策略是一种优先级的抢先式调度。

Java基于线程的优先级选择高优先级的线程进行运行。

该线程将持续运行,直到它终止运行,或其他高优先级线程称为可运行的。

4.如何在Java程序中实现多线程?
答:1:通过Thread类的构造方法
2:通过实现Runnable接口创建线程、
3:通过继承Thread类创建线程
5.试简述Thread类的子类或实现Runnable接口两种方法的异同?
答:采用继承Thread类方法使程序代码简单,并可以在run()方法中直接调用线程的其他方法。

而实现Runnable接口更符合面向对象设计的思想,因为从OO设计的角度,thread 类是虚拟CPU的封装,所以Thread的子类应该是关于CPU行为的类。

但在继承Thread类之类构造线程的方法中,Thread类的子类大都是与CPU不相关的类。

而实现Runnable接口的方法,将不影响Java类的体系,所以更加符合面向对象的设计思想。

同时,实现了Runnable 接口的类可以用extends继承其他的类。

四、程序设计题
1.编写一个类,在类中定义:
A:一个整型属性
B:一个方法,在这个方法中给变量加1,并打印出这个变量的值然后创建5个线程,分别调用类中定义的方法
(注意线程的同步)。

相关文档
最新文档