当前位置:文档之家› Java第七单元练习题Java多线程机制(20210109223217)

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

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. 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() { …}

}

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 9 D. 编译通过,运行无输出 4、有关线程的叙述正确的有: ( ) A. 通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。 B. 可以获得对任何对象的互斥锁定。 C. 线程通过调用对象的synchronized 方法可取得对象的互斥锁定。 D. 线程调度算法是平台独立的。 5、以下哪个是线程类的方法? A. yield() B. sleep(long msec) C. go() D. stop() 6、以下哪个最准确描述synchronized 关键字?

《JAVA语言程序设计》期末考试试题及答案(2)

《JA V A语言程序设计》期末考试试题及答案 一、单选题 1、下列程序段执行后的结果是( A )。 String s = new String("abcdefg"); for (int i=0; i

JAVA程序设计期末考试题(多套含答案)

《JA V A程序设计》期末考试试题(五) 一、单选题 1、当某一线程正处于休眠状态,而另一个线程用Thread 类中的interrupt() 方法中断它时,抛出的异常类型是()。 A) IOException B) RuntimeException C) InterruptedException D) ClassNotFoundException 2、下面的程序段的功能是( )。 File file1=new File("d:\\xxx\\yyy\\zzz"); file1.mkdirs(); A)在当前目录下生成子目录:\xxx\yyy\zzz B)生成目录:e:\xxx\yyy\zzz C)在当前目录下生成文件xxx.yyy.zzz D)以上说法都不对 3、应用程序的main方法中有以下语句,则输出的结果是( )。 String s = "xxxxxxxxxxxxxxx#123#456#zzzzz"; int n = s.indexOf("#"); int k = s.indexOf("#", n+1); String s2 = s.substring(n+1, k); System.out.println(s2); A) 123456 B) 123 C) xxxxxxxxxxxxxxx D) zzzzz 4、关于下面的程序Test.java说法正确的是( )。 public class Test { String x="1"; int y; public static void main(String args[]) { int z=2; System.out.println(x+y+z); } } A)3 B)102 C) 12 D)程序有编译错误 5、应用程序的main方法中有以下语句,则输出的结果是( )。

java多线程试题答案

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

java线程练习题及答案

线程与线程类 1 线程的概念 线程的概念来源于计算机的操作系统的进程的概念。进程是一个程序关于某个数据集的一次运行。也就是说,进程是运行中的程序,是程序的一次运行活动。 线程和进程的相似之处在于,线程和运行的程序都是单个顺序控制流。有些教材将线程称为轻量级进程(light weight process)。线程被看作是轻量级进程是因为它运行在一个程序的上下文内,并利用分配给程序的资源和环境。 作为单个顺序控制流,线程必须在运行的程序中得到自己运行的资源,如必须有自己的执行栈和程序计数器。线程内运行的代码只能在该上下文内。因此还有些教程将执行上下文(execution context)作为线程的同义词。 所有的程序员都熟悉顺序程序的编写,如我们编写的名称排序和求素数的程序就是顺序程序。顺序程序都有开始、执行序列和结束,在程序执行的任何时刻,只有一个执行点。线程(thread )则是进程中的一个单个的顺序控制流。单线程的概念很简单,如图1所示。 多线程(multi-thread )是指在单个的程序内可以同时运行多个不同的线程完成不同的任务,图2说明了一个程序中同时有两个线程运行。 图1 单线程程序示意图 图2 多线程程序示意图 有些程序中需要多个控制流并行执行。例如, for(int i = 0; i < 100; i++) System.out.println("Runner A = " + i); for(int j = 0; j < 100; j++ ) System.out.println("Runner B = "+j); 上面的代码段中,在只支持单线程的语言中,前一个循环不执行完不可能执行第二个循环。要使两个循环同时执行,需要编写多线程的程序。 很多应用程序是用多线程实现的,如Hot Java Web 浏览器就是多线程应用的例子。在Hot Java 浏览器中,你可以一边滚动屏幕,一边下载Applet 或图像,可以同时播放动画和声音等。 2 Thread 类和Runnable 接口 多线程是一个程序中可以有多段代码同时运行,那么这些代码写在哪里,如何创建线程对象呢? 首先,我们来看Java 语言实现多线程编程的类和接口。在https://www.doczj.com/doc/751512236.html,ng 包中定义了Runnable 接口和Thread 类。

Java第七单元练习题-Java多线程机制

7Java多线程机制 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. 异步调用 类的方法中,toString()方法的作用是() A. 只返回线程的名称 B. 返回当前线程所属的线程组的名称 C. 返回当前线程对象 D. 返回线程的名称 语言具有许多优点和特点,下列选项中,哪个反映了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()方法、如(),将使线程的状态从New(新建状态)转换为 _________。 9.多线程是java程序的________机制,它能同步共享数据,处理不同事件。 10.进程是由代码、数据、内核状态和一组寄存器组成,而线程是表示程序运行状态的

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中怎么解决生产者——消费者问题,当然有很多解决方法,我已经分享了一种用阻塞队列实现的方法。有些时候他们甚至会问怎么实现哲学家进餐问题。 6)用Java编程一个会导致死锁的程序,你将怎么解决?

Java多线程题目及答案

任务8 多线程编程 一、实验目的 1. 掌握线程的概念、线程的生命周期。 2. 掌握采用继承Thread 类创建子线程。 3. 掌握使用Runnable 接口使类线程化。 二、实验要求 1.掌握线程的概念、线程的生命周期。 2.掌握使用Runnable 接口使类线程化。 三、实验内容 一、输入以下源代码,多次运行程序,分析输出结果 1. 继承Thread 类创建子线程 public class MultiThreadExample{ public static void main(String []args){ new ThreadDemo("A").start();//启动线程A new ThreadDemo("B").start();//启动线程B } } class ThreadDemo extends Thread{ public ThreadDemo(String n){ super(n); //线程名称 } public void run(){ for(int i=0;i<5;i++){ try{ // 睡眠一段随机时间 Thread.sleep((long)(Math.random() * 1000)); }catch(InterruptedException e){ e.printStackTrace(); } System.out.print(getName()); //打印线程名称 } } } 2. 使用Runnable 接口使类线程化 class MyThread1 implements Runnable { // 实现Runnable接口创建线程类MyThread public void run() { // 实现Runnable接口的run()方法 for (int i = 0; i < 9; i++) { System.out.println(Thread.currentThread().getName()+i + " "); } } }

java高级测试题

评卷浏览 考生姓名陈大磊答题开始时间2013-03-2711:05结束时间2013-04-1311:06 考生得分0满分200及格分60 一、单项选择题(共36题,36分) 1.已知一个引用类型变量myvar指向了一个流对象,在程序中出现了如下语句:myvar.flush(); myvar.close();则 myvar所指向的对象一定是:(1分) A)输入流 B)输出流 C)字符流 D)字节流 —标准答案:B —考生答案:A —考生得分:0评语: 2.下面关于ServerSocket的描述错误的是:(1分) A)ServerSocket表示服务器端的倾听Socket,等待客户机发起TCP连接。 B)ServerSocket仅用于监听客户端的发起的连接请求,一旦受到客户端请求即返回一个Socket与客户端通信。 ServerSocket并不负责与客户单通信。 C)ServerSocket通过accept()方法监听等待客户端的请求,未收到客户端的连接请求之前当前线程处于阻塞状态。 D)一个ServerSocket只能在一个端口监听,因此一个ServerSocket只能接收到一个客户端请求。—标准答案:D —考生答案: —考生得分:0评语: 3.关于字符流的说法正确的是:(1分) A)字符流是双字节流,因此使用字节流读取两次与与字符流读取一次的效果完全一致。 B)字符流会涉及字符编码的转换。 C)通过字符流可以复制word文档。 D)通过字符流将文本写入文件,则文件中的编码一定是双字节编码。 —标准答案:B

—考生答案: —考生得分:0评语: 4.下面有关Java线程的说法正确的是:(1分) A)wait()方法是Thread类特有的方法。 B)任何对象都有wait()方法。 C)任何情况下都可以调用任何对象的wait()方法,使当前线程等待。 D)只有锁对象有notify()方法,其它对象没有该方法。 —标准答案:B —考生答案: —考生得分:0评语: 5.在Java中按输入和输出方向可以将流分为哪几类?(1分) A)输入流和输出流 B)字节流和字符流 C)节点流和处理流 D)对象流和数据流 —标准答案:A —考生答案: —考生得分:0评语: 6.下面关于字节流说法正确的是:(1分) A)使用字节流仅可以复制二进制文件,不能复制文本文件。 B)使用字节流可以复制文本文件。 C)使用字节流是不能读取文本文件的。 D)字节流就是节点流。 —标准答案:B —考生答案: —考生得分:0评语: 7.下面关于Java主线程的说法错误的是:(1分) A)主方法所在的线程即主线程。

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

J a v a第七单元练习题 J a v a多线程机制 The latest revision on November 22, 2020

7Java多线程机制 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用()机制实现了进程之间的异步执行

Java多线程技术中所有方法的详细解析

Java多线程技术中所有方法的详细解析 一、run()和start() 这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法 启动线程将自动调用run()方法,这是由Java的内存机制规定的。并且run()方法必须是p ublic访问权限,返回值类型为void. 二、关键字Synchroni zed 这个关键字用于保护共享数据,当然前提是要分清哪些数据是共享数据。每个对象都有一个锁标志,当一个线程访问该对象时,被Sy nchroni zed修饰的数据将被"上锁”,阻止 其他线程访问。当前线程访问完这部分数据后释放锁标志,其他线程就可以访问了。 以下是引用片段: public ThreadTest implements Runnable { public synchronized void run(){ for(int i=0;i<10;i++) { System.out.println(" " + i); } } public static void main(String[] args) { Runnable r1 = new ThreadTest(); Runnable r2 = new ThreadTest(); Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start(); } } 以上这段程序中的i变量并不是共享数据,也就是这里的Sy nchroni zed关键字并未起作用。因为t1,t2两个线程是两个对象(r1 , r2)的线程。不同的对象其数据是不同的,所以r1和r2两个对象的i 变量是并不是共享数据。 当把代码改成如下:Sy nchroni zed关键字才会起作用

Java并发编程面试题整理与答案

2019年Java并发面试题整理(答案) 1、多线程的价值? (1)发挥多核CPU 的优势 多线程,可以真正发挥出多核CPU 的优势来,达到充分利用CPU 的目的,采用多线程的方式去同时完成几件事情而不互相干扰。 (2)防止阻塞 从程序运行效率的角度来看,单核CPU 不但不会发挥出多线程的优势,反而会因为在单核CPU 上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU 我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU 使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。 (3)便于建模 这是另外一个没有这么明显的优点了。假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务A 分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。 2、实现可见性的方法有哪些? synchronized 或者Lock:保证同一个时刻只有一个线程获取锁执行代码,锁释放之前把最新的值刷新到主内存,实现可见性。 3、并发编程三要素? (1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。 (2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。 (3)有序性 有序性,即程序的执行顺序按照代码的先后顺序来执行。

Java多线程面试题汇总

Java多线程面试题汇总 1)什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。 2)线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。更多详细信息请点击这里。 3)如何在Java中实现线程? https://www.doczj.com/doc/751512236.html,ng.Thread类的实例就是一个线程但是它需要调用https://www.doczj.com/doc/751512236.html,ng.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承https://www.doczj.com/doc/751512236.html,ng.Thread类或者直接调用Runnable接口来重写run()方法实现线程。 4)Thread类中的start()和run()方法有什么区别? 这个问题经常被问到,但还是能从此区分出面试者对Java线程模型的理解程度。start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当

你 调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。 5)Java中Runnable和Callable有什么不同? Runnable和Callable都代表那些要在不同的线程中执行的任务。Runnable从JDK1.0开始就有了,Callable是在JDK1.5增加的。它 们的主要区别是Callable的call()方法可以返回值和抛出异常,而Runnable的run()方法没有这些功能。Callable可以返回装载有计 算结果的Future对象。 6)Java内存模型是什么? Java内存模型规定和指引Java程序在不同的内存架构、CPU 和操作系统间有确定性地行为。它在多线程的情况下尤其重要。 Java内存模型对一个线程所做的变动能被其它线程可见提供了 保证,它们之间是先行发生关系。 ●线程内的代码能够按先后顺序执行,这被称为程序次序 规则。 ●对于同一个锁,一个解锁操作一定要发生在时间上后发 生的另一个锁定操作之前,也叫做管程锁定规则。 ●前一个对Volatile的写操作在后一个volatile的读操作之 前,也叫volatile变量规则。 ●一个线程内的任何操作必需在这个线程的start()调用之 后,也叫作线程启动规则。

java多线程测试试题

java多线程试题

————————————————————————————————作者:————————————————————————————————日期:

狂翔IT工作室多线程试程 一.选择题 1.下列说法中,正确的一项是() A A.单处理机的计算机上,2个纯种一官半职直不能并发执行 B.单处理机的计算机上,2个线程实际能够并发执行 C.一个线程可以包含多个线程 D.一个进程只能包含一个线程 2.下列说法中错误的一项是()A A.线程就是程序 B.线程是一个程序的单个执行 流 B.多线程是指一个程序的多个执行流D.多线程用于实现并发 3.下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态(D) A.等待阴塞状态下的线程被notify()唤 B.等待阻塞状态下的纯种被interrput()中断 C.等待时间到 D.等待阻塞状态下的线程调用wait()方法 4.下列哪个方法可以使线程从运行状态进入其他阻塞状态(A) A.sleep B.wait C.yield D.start 5.下列不是进程组成部分的一项是(D) A.代码 B.数据 C.内核状态 D.显示器 6.下列哪一个不属于java线程模型的组成部分(D) A.虚拟的CPU B.虚拟CPU执行的代码 C. 代码所操作的数据 D.执行流 7.下列说法中错误的一项是(C) A.Java中的第一个线程都属于某个线程组 B.线程只能在其创建时设置所属的线程组 C.线程创建之后,可以从一个线程组转移到另一个线程组 D.新建的线程默认情况下属于其父线程所属的线程组 8.下列不属于线程组成部分的一项是(C) A.程序计数器 B.堆栈 C. 进程地十空间中的代码 D.栈指针 9.下列关于JA V A线程模型的说法中,错误的一项是(A) A.Java线程模型包括计算机的CPU B.代码可以与其他线程共享 C. 数据可以被多个线程共享 D.线程模型在https://www.doczj.com/doc/751512236.html,ng.Thread类中被定义 10.下列说法中错误的一项是(D) A.一个线程是一个Thread类的实例 B.线程从传递给纯种的Runnable实例run()方法开始执行 C.线程操作的数据来自Runnable实例 D.新建的线程调用start()方法就能立即进入运行状态 11.下列关于Thread类提供的线程控制方法的说法中,错误的一项是(D) A.在线程A中执行线程B的join()方法,则线程A等待直到B执行完 成 B.线程A通过调用interrupt()方法来中断其阻塞状态

Java 多线程面试题及答案

这篇文章主要是对多线程的问题进行总结的,因此罗列了39个多线程的问题。 这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。 1、多线程有什么用? 史上最全Java 多线程面试题及答案 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法: 1)发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程"同时"运行罢了。多核CPU 上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。 2)防止阻塞 从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。 3)便于建模 这是另外一个没有这么明显的优点了。假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。 2、创建线程的方式

【2020最新Java面试题资料】40道常问的Java多线程面试题

这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。 1、多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:1)发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程"同时"运行罢了。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。 2)防止阻塞 从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。

【2020最新Java面试题资料】15道面试常问的Java多线程面试题

1)现在有T1T2T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。 2)在中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它? lock接口在多线程和并发编程中最大的优势是它们为读和写分别提供了锁,它能满足你写像ConcurrentHashMap这样的高性能数据结构和有条件的阻塞。线程面试的问题越来越会根据面试者的回答来提问。我强烈建议在你去参加多线程的面试之前认真读一下Locks,因为当前其大量用于构建电子交易终统的客户端缓存和交易连接空间。 3)在java中wait和sleep方法的不同? 通常会在电话面试中经常被问到的线程面试问题。最大的不同是在等待时wait会释放锁,而sleep一直持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停执行。 4)用实现阻塞队列。 这是一个相对艰难的多线程面试问题,它能达到很多的目的。第一,它可以检测侯选者是否能实际的用线程写程序;第二,可以检测侯选者对并发场景的理解,并且你可以根据这个问很多问题。如果他用wait()和notify()方法来实现阻塞队列,你可以要求他用最新的Java 5中的并发类来再写一次。 5)用Java写代码来解决生产者——消费者问题。 与上面的问题很类似,但这个问题更经典,有些时候面试都会问下面的问题。在中怎么解决生产者——消费者问题,当然有很多解决方法,我已经分享了一种用阻塞队列实现的方法。有些时候他们甚至会问怎么实现哲学家进餐问题。 6)用编程一个会导致死锁的程序,你将怎么解决? 这是我最喜欢的线程面试问题,因为即使死锁问题在写多线程并发程序时非常普遍,但是很多侯选者并不能写deadlock free code(无死锁代码?),他们很挣扎。只要告诉他们,你有N个资源和N个线程,并且你需要所有的资源来完成一个操作。为了简单这里的n可以替换为2,越大的数据会使问题看起来更复杂。通过避免中的死锁来得到关于死锁的更多信息。

JAVA高级考试题

一、单项选择题(共36题,36分) 1. 已知一个引用类型变量myvar指向了一个流对象,在程序中出现了如下语句:myvar.flush(); myvar.close(); 则myvar所指向的对象一定是:(1 分) A) 输入流 B) 输出流 C) 字符流 D) 字节流 —标准答案:B 2. 下面关于ServerSocket的描述错误的是:(1 分) A) ServerSocket表示服务器端的倾听Socket,等待客户机发起TCP连接。 B) ServerSocket仅用于监听客户端的发起的连接请求,一旦受到客户端请求即返回一个Socket与客户端通信。ServerSocket并不负责与客户单通信。 C) ServerSocket通过accept()方法监听等待客户端的请求,未收到客户端的连接请求之前当前线程处于阻塞状态。 D) 一个ServerSocket只能在一个端口监听,因此一个ServerSocket只能接收到一个客户端请求。 —标准答案:D 3. 关于字符流的说法正确的是:(1 分) A) 字符流是双字节流,因此使用字节流读取两次与与字符流读取一次的效果完全一致。 B) 字符流会涉及字符编码的转换。 C) 通过字符流可以复制word文档。 D) 通过字符流将文本写入文件,则文件中的编码一定是双字节编码。

—标准答案:B 4. 下面有关Java线程的说法正确的是:(1 分) A) wait()方法是Thread类特有的方法。 B) 任何对象都有wait()方法。 C) 任何情况下都可以调用任何对象的wait()方法,使当前线程等待。 D) 只有锁对象有notify()方法,其它对象没有该方法。 —标准答案:B 5. 在Java中按输入和输出方向可以将流分为哪几类?(1 分) A) 输入流和输出流 B) 字节流和字符流 C) 节点流和处理流 D) 对象流和数据流 —标准答案:A 6. 下面关于字节流说法正确的是:(1 分) A) 使用字节流仅可以复制二进制文件,不能复制文本文件。 B) 使用字节流可以复制文本文件。 C) 使用字节流是不能读取文本文件的。 D) 字节流就是节点流。 —标准答案:B 7. 下面关于Java主线程的说法错误的是:(1 分) A) 主方法所在的线程即主线程。

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

Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的。他们会问面试者很多令人混淆的Java线程问题。面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面。用于直接面向市场交易的高容量和低延时的电子交易系统在本质上是并发的。下面这些是我在不同时间不同地点喜欢问的Java线程问题。我没有提供答案,但只要可能我会给你线索,有些时候这些线索足够回答问题。现在引用Java5并发包关于并发工具和并发集合的问题正在增多。那些问题中ThreadLocal、Blocking Queue、Counting Semaphore和ConcurrentHashMap比较流行。 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中怎么解决生产者——消费者问题,当然有很多解决方法,我已经分享了一种用阻塞队列实现的方法。有些时候他们甚至会问怎么实现哲学家进餐问题。

相关主题
文本预览
相关文档 最新文档