当前位置:文档之家› java多线程试题

java多线程试题

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/b99894126.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()方法来中断其阻塞状态

C.若线程A调用方法isAlive()返回值为true,则说明A正在执行中

D.currentThread()方法返回当前线程的引用

12.下列说法中,错误的一项是()

A.对象锁在synchronized()语句执行完之后由持有它的线程返还

B.对象锁在synchronized()语句中出现异常时由持有它的线程返还

C.当持有锁的线程调用了该对象的wait()方法时,线程将释放其持有的锁

D.当持有锁的线程调用了该对象的构造方法时,线程将释放其持有的锁

13.下面的哪一个关键字通宵用来对对象的加锁,从而使得对对象的访问是排他的 A

A.sirialize B transient C synchronized D static

14.下列关于线程的说法以中,正确的一项是(D)

A.由同一类创建的多个线程都同时运行结束

B.创建线程只能通过继承https://www.doczj.com/doc/b99894126.html,ng.Thread类

C.调用suspend()方法暂停的一个线程将不会再被重新执行

D.程序的执行完毕与超级线程(daemon threads)无关

15.下列说法中错误的一项是(C)

A.可串行化的类必须实现Serializable接口

B.可串行化的类中的静态变量可以不被串行化

C.private数据访问权限能够限制数据不被串行化

D.对象串行化使用java语言提供的默认机制

16.下列说法中错误的一项是(C)

A.可串行化的类必须实现Serializable接口

B.可串行化的类中的静态变量可以不被串行化

C.private数据访问权限能够限制数据不被串行化

D.对象串行化java语言提供的默认机制

17.下列说法中正确的一项是(A)

A.代码和数据是进程的组成部分

B.代码和数据是线程的组成部分

C. 进程是轻型的线程

D.线程中包括线程

18. 下列说法中错误的一项是(C)

A.java的纯种体由Thread类的run()方法定义

B.线程创建时已经确定了提供线程体的对象

C.在程序中通过调用Thread类的run()方法创建线程对象

D.java中每一个线程都有自己的名字

19. 下列说法中错误的一项是(B)

A.共享数据的所有访问都必须使用synchronized加锁

B.共享数据的访问不一定全部使用synchronized加锁

C.所有的对共享数据的访问都是临界区

D.临界区必须使用syschronized标识

20.下列有关线程的叙述中正确的一项是(B)

A.一旦一个线程被创建,它就立即开始运行

B.使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行

C.当一个线程因为抢占机制而停止运行时,它被放在可运行队列的前面

D.一个线程可能因为不同的原因而终止并进入终止状态

二.填空题

1. 在操作系统中,被称做轻型的进程是线程

2. 多线程程序设计的含义是可以将一个程序任务分成几个并行的任务

3. 在Java程序中,run()方法的实现有两种方式:实现Runnable接口和继

承Thread类

4.线程的高度是指在单个CPU上以某种顺序运行多个线程

5.多个线程并发执行时,各个线程中语句的执行顺序是确定的,但是线程之间的相对执行顺序是不确定的

6.Java中的对象锁是一种独占的排他锁

7.程序中可能出现一种情况:多个纯种互相等待对方持有的锁,而在得到对方的锁之前都不会释放自己的锁,这就是死锁.

8. notyfyAll() 方法将对象wait pool中的所有纯种都移到lock pool中。

9.在一个线程中,建议使用标志,而不使用stop() 方法终止另一个线程。

10.Java线程组把一组线程看做一个对象进行统一处理。

11.进程是一个内核级的实体,而线程是一个用户级的实体

12.在Java线程模型中的数据和代码构成了线程体。

13.线程的优先级是在Thread类的常数MIN_PRIORITY 和MAX_PRIORITY

之间的一个值

14.Java的线程高度策略是基于优先级的抢占式调度。

15.处于新建状态的线程可以使用的控制方法是start() 和stop() 。

16.一个进程可以包含多个线程

17.多任务操作系统运行多个进程来并发地执行多个任务

18.线程是由表示程序运行状态的寄存器组成的

19.多线程允许单个程序创建多个并行执行的线程来完成多个子任务

20.Thread类中表示最高优先级的常量是getPriority() ,而表示最低优先级的常量是setPriority(0 .

三.简答题

1. 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?

答:主要相同点: Lock能完成synchronized所实现的所有功能

主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

2.理解几个概念对象锁、sleep、wait、notify、notifyAll

对象锁:每个对象都有对象锁,当某个线程进入用synchronized定义方法时,就获得了当前类对象(方法所属的类的对象)的锁,其他线程就不能再获得该锁,直到线程释放该锁。一个类对象有一个对象锁,多个同步方法公用一个对象锁。

sleep:是当前线程处于休眠状态,将对cpu的控制权交给其他线程,但不释放当前对象的锁,其他线程可以获得cpu,但不能进入当前线程控制的对象锁。

wait:与sleep的区别是,它会释放对象锁,其他线程可以进入该同步块。

notify:进入当前同步块的线程调用wait方法变成休眠状态的线程,notify将该线程变成等待状态。

notifyAll:进入当前同步块的线程调用wait方法变成休眠状态,notifyAll使所有休眠线程变成等待状态。

一个类中有多个同步方法,进入任意一个同步块都将获得该对象锁,由于wait方法使进入同步块的线程休眠,notify只能唤醒所有被休眠线程中的一个,notifyAll可以唤醒所有休眠线程。通常线程的通信通过wait,notifyAll和wait条件来实现。

3.java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和suspend() 方法为何不推荐使用?

答:有两种实现方法,分别是继承 Thread类与实现Runnable接口

用synchronized关键字修饰同步方法

反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread 类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用 wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

4. sleep() 和 wait() 有什么区别 ?

答: sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

5. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。

答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

6. 启动一个线程是用 run() 还是 start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

7.当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法 ?

答:不能,一个对象的一个synchronized方法只能由一个线程访问。

8. 请说出你所知道的线程同步的方法。

答: wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的

唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

9. 多线程有几种实现方法 , 都是什么 ? 同步有几种实现方法 , 都是什么 ?

答:多线程有两种实现方法,分别是继承 Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,wait与notify

10.线程的基本概念、线程的基本状态以及状态之间的关系

答:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。

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

16.JAVA网络编程实验 多线程

Java网络编程实验报告 (实验六) 学号:姓名: 实验项目名称:多线程教师评分: 一、实验目的 (1)了解线程的概念。 (2)学习简单的多线程编程。 二、预习内容及要求(要求写出预习内容) 1.进程和线程的概念 进程是程序一次动态执行的过程,对应从代码加载、执行到执行结束这样一个完整的过程,也是进程自身从产生、发展到消亡的过程。 线程是比进程更小的执行单元,一个进程在执行过程中,可以产生多个线程。每个线程都有自身的产生、执行和消亡的过程。 2.线程的状态与生命周期 ●新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。此 时它已经有了相应的内存空间和其他资源。 ●运行:线程创建之后就具备了运行的条件,一旦轮到它来享用CPU资源时,即JVM将CPU 使用权切换给该线程时,此线程的就可以脱离创建它的主线程独立开始自己的生命周期了(即 run方法执行的过程)。 ●中断:有4种原因的中断,CPU资源从当前线程切换给其他线程、执行了sleep(int millsecond) 方法、执行了wait()方法、进入阻塞状态。 ●死亡:run方法结束。 3.线程的创建 在Java语言中,与线程支持密切相关的是https://www.doczj.com/doc/b99894126.html,ng.Thread类和https://www.doczj.com/doc/b99894126.html,ng.Runnable接口。Runnable 接口定义很简单,只有一个run方法。任何一个类如果希望自己的实例能够以线程的形式执行,都可以来实现Runnable接口。 继承Thread类和实现Runnable接口,都可以用来创建Thread对象,效果上并没有什么不同。继承Thread类的方法很明显的缺点就是这个类不能再继承其他的类了,而实现Runnable接口不会有这个麻烦。 另外,在继承Thread类的代码中,this其实就是指当前正在运行的线程对象,如果使用实现Runnable 接口的方式,要得到当前正在执行的线程,需要使用Thread.currentThread()方法。 线程创建后仅仅是占有了内存资源,在JVM管理的线程中还没有这个线程,此线程必须调用start ()方法(从父类继承的方法)通知JVM,这样JVM就会知道又有一个新一个线程排队等候切换了。

Java基础测试题(答案)

1. 有以下程序片段,下列哪个选项不能插入到行1。( D ) 1. 2.public class Interesting{ 3.//do sth 4. } (只能有一个public修饰的class) A、import java.awt.*; B、package mypackage; C、class OtherClass{ } D、public class MyClass{ } 2. 以下哪项是接口的正确定义?( B D ) A、interface B { void print(){};} (接口里的方法都是抽象的,不能有方法体) B、abstract interface B { void print() ;} C、abstract interface B extends A1,A2 //A1、A2为已定义的接口 { abstract void print(){ };} (同上) D、interface B { void print();} 1.接口可以声明为public(公共)或默认的访问权限。接口隐含表明是抽象的(abstract)的。 2.接口的方法默认即为public(公共)且是abstract(抽象)的. 3.接口中的变量默认即为public(公共), static(静态) and final(最终的)。 接口声明编译器如何解释呢 public interface Searchable {}public abstract interface Searchable {} abstract interface Searchable {}abstract interface Searchable {} interface Searchable {}abstract interface Searchable {}

Java多线程技术及案例

Java多线程技术及案例 进程和线程: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。 线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 多进程是指操作系统能同时运行多个任务(程序)。 多线程是指在同一程序中有多个顺序流在执行。 Java中多线程的多种实现方式 Java中有多种多线程实现方法,主要是继承https://www.doczj.com/doc/b99894126.html,ng.Thread类的方法和 https://www.doczj.com/doc/b99894126.html,ng.Runnable接口的方法。 继承Thread类 Thread是https://www.doczj.com/doc/b99894126.html,ng包中的一个类,从这个类中实例化的对象代表线程,启动一个新线程需要建立一个Thread实例。 使用Thread类启动新的线程的步骤如下: 1.实例化Thread对象 2.调用start()方法启动线程 构造方法:

public Thread(String threadName); public Thread(); 例程: publicclass Thread1extends Thread{//定义一个类继承Thread privateint count=1000; publicvoid run(){//重写run方法 while(true){ System.out.print(count+" "); if(--count==0){ return; } } } publicstaticvoid main(String[] args){ Thread1 th1=new Thread1();//实例化继承了Thread的类 Thread1 th2=new Thread1(); th1.start();//调用start()方法, th2.start(); for(int i=0;i<1000;i++){ System.out.print("A "); } }

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

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

8-实验八Java多线程操作(实验报告内容)

实验八 Java多线程操作 (实验报告) 一、目的 1.掌握Java多线程操作。 二、实验内容 启动线程,线程休眠,线程同步,等待和唤醒 三、实验环境 JDK1.6+dos环境 四、实验原理 通过案例掌握多线程操作。 五、实验步骤 1、设计一个线程操作类,要求可以产生三个线程对象,并可以分 别设置三个线程的休眠时间,如下所示: 线程A,休眠10秒 线程B,休眠20秒 线程C,休眠30秒 2、生产者与消费者问题,生产者生产一台电脑,消费者马上将生 产出的电脑取走。 六、实验小结 1、class MyThread implements Runnable{

String name; int time; public MyThread(String name,int time){ https://www.doczj.com/doc/b99894126.html,=name; this.time=time; } public void run(){ try{ Thread.sleep(this.time); } catch(Exception e){ } System.out.println(https://www.doczj.com/doc/b99894126.html,+"线程,休眠"+this.time/1000+"秒"); } } public class Demo08{ public static void main(String args[]){ MyThread mt1=new MyThread("线程A",10000); MyThread mt2=new MyThread("线程B",20000); MyThread mt3=new MyThread("线程C",30000);

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程序设计期末考试题(多套含答案)

《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实验三

实验三:基于多线程的Socket通信 班级:计科F1202 姓名:黄浩翔学号:201216010110 实验目的:通过将Socket通信和多线程的知识结合应用,掌握基于多线程的通信设计方法。 实验内容:创建客户端Socket;创建服务器端Socket;建立基于多线程的服务器段监听和数据处理机制;Socket的启动和管理。 实验步骤: //服务端 package基于多线程Socket通信; import https://www.doczj.com/doc/b99894126.html,.ServerSocket; import https://www.doczj.com/doc/b99894126.html,.Socket; public class MultiServer { public static void main(String args[]) { ServerSocket server=null; int count=0; boolean listening =true; try{ try{ server =new ServerSocket(6000);

System.out.println("服务器启动:"); } catch (Exception e){ System.out.println("不能接听服务"); } while(listening){ Socket socket=server.accept(); count++; System.out.println("Accept "+count+" Client!"); Thread read = new ReadThread(socket,"[client"+count+"]"); read.start(); } server.close(); } catch (Exception e){ System.out.println("Error:" + e); } } } //多线程 package基于多线程Socket通信; import java.io.BufferedReader;

java多线程实验报告

java多线程实验报告 篇一:西北农林科技大学java多线程实验报告 实验7 多线程 1.实验目的 (1) 掌握Java多线程的概念和实现方法 (2) 掌握Java多线程的同步问题 2.实验内容 任务一:火车售票 假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。程序运行结果见左图。 打开Eclipse Tickets.java public class Ticket extends Thread { int ticket =1000; String name =""; public void run(){ while(true){synchronized(name){ if(ticket "第" + Thread.currentThread().getName()+ "售票点卖出了第" + ticket-- + "张票"); } } } }} try{ } catch(InterruptedException e){ }

Thread.sleep(100); Test.java public class Test { } public static void main(String args[]){} Ticket t = new Ticket(); new Thread(t,"1").start(); new Thread(t,"2").start(); new Thread(t,"3").start(); new Thread(t,"4").start(); new Thread(t,"5").start(); new Thread(t,"6").start(); new Thread(t,"7").start(); new Thread(t,"8").start(); new Thread(t,"9").start(); new Thread(t,"10").start(); 任务二:银行存款 假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。现有两个顾客,每人都分3次,每次100元将钱到入。试编写一个程序,模拟实际作业。 程序如下: classCBank { private static int sum=0; public static void add(int n){ inttmp=sum; tmp=tmp+n;// 累加汇款总额 try{ Thread.sleep((int)(10000*Math.random())); //

Java多线程练习题

Java 多线程编程练习题 [] 选择题 1.编写线程类,要继承的父类是: A:Object B:Runnable C:Serializable D:Thread E: Exception 答 2.编写线程类,可以通过实现那个接口来实现? A:Runnable B:Throwable C:Serializable D:Comparable E:Cloneable 答: 4.一个线程通过什么方法将处理器让给另一个优先级别相同的线程? A:wait B:yield C:join D:sleep E:stop 答: 5.如果要一个线程等待一段时间后再恢复执行此线程,需要调用什么方法?A:wait B:yield C:join D:sleep E:stop F:notify 答: 7.Runnable接口定义了如下哪些方法? A: start() B: stop() C: resume() D: run()

E: suspend() 答: 8. 如下代码创建一个新线程并启动线程: Runnable target=new MyRunnable(); Thread myThread=new Thread(target); 问:如下哪些类可以创建target对象,并能编译正确? A: public class MyRunnable extends Runnable { public void run(){} } B: public class MyRunnable extends Object { public void run() {} } C: public class MyRunnable implements Runnable {public void run() {}} D: public class MyRunnable extends Runnable {void run() {}} E: public class MyRunnable implements Runnable {void run() {}} 答: 9.给出代码如下: public class MyRunnable implements Runnable { public void run() { -------------------------------- } } 问在虚线处,如下哪些代码可以创建并启动线程? A: new Runnable(MyRunnable).start(); B: new Thread(MyRunnable).run(); C: new Thread(new MyRunnable()).start(); D: new MyRunnable().start(); 答: [] 问答题 1.线程和进程有什么区别? 2.Java创建线程的方式有哪些? [] 编程题 1.编写多线程应用程序,模拟多个人通过一个山洞的模拟。这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,随机生成10个人,同时准备过此山洞,显示一下每次通过山洞人的姓名。 2.选做,目前有三个类,里面都有打印的方法,类A的该方法可以打印出10个A,类B的方法可以打印出10个B,类C的方法可以打印出10个C.请利用多线程(提示wait,notify)实现轮流打印出ABC.

java多线程实现调度

重庆交通大学综合性设计性实验报告 实验项目名称:进程调度(先来先服务) 实验项目性质: JAVA多线程 实验所属课程: JAVA程序设计 实验室(中心):语音大楼 8 楼 801 班级:软件专业 2012级2班 姓名:尚亚* 学号: 631206050216 指导教师:杨 实验完成时间: 2014 年 11 月 25 日

一、实验目的 1、理解程序、线程和进程的概念; 2、理解多线程的概念; 3、掌握线程的各种状态; 4、熟练使用Thread类创建线程; 5、熟练使用线程各种方法; 6、掌握线程的调度及线程同步的实现原理。 二、实验内容及要求 进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。 用JA V A语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。做一个能够直观体现多个进程时,CPU 是怎样调度就绪队列中的进程(按照先来先服务的原则)。

三、实验设备 PC机,windows7,eclipse。 四、设计方案 ㈠设计主要思想 (1)要模拟进程的调度算法,必须先体现处进程及系统资源。 (2)要体现先来先服务的算法,就必须表现出当有一个进程进入CPU时其他进程不能进入,并在就绪队列中排队。本实验建立了四个圆移动的线程表示作业调度,用圆在表示就绪队列的方框中停留表示进程在就绪队列中排队。 (3)当有一个圆移动到表示CPU的范围内时,让其它线程在就绪队列中排队,当CPU内无进程时,先来的圆先移动,以表示CPU 对进程的调度。 ㈡设计的主要步骤 (1)建立四个不同颜色的圆移动的线程,表示对四个进程的调度。 (2)当有一个表示进程的圆到达表示CPU范围内时,通过让其它几个圆停留在表示就绪队列的方框范围内,表示进程在就绪队列中排成队列。 (3)当第一个先到达的进程释放CPU,在排成队列的几个圆中选择先到达的圆,使其移动表示对先来的进程进行调度,直到所有的圆移动完毕。 五、主要代码 import java.awt.Font; import java.awt.event.*;

Java实验五线程

实验五线程 一实验要求 1、理解进程和线程概念; 2、掌握创建、管理和控制Java线程对象的方法; 3、了解并发执行的多线程存在的各种关系 二实验内容 1、使用线程对象或Timer定时器制作数字时钟标签组件,显示当前日期和时间,每秒刷新,将该标签添加到框架窗口。 import java.awt.FlowLayout; import java.text.SimpleDateFormat;//简单日期格式类 import java.util.Locate; import java.util.Timer;//一种工具,线程用其安排以后在后台线程中执行的任务 import java.util.TimerTask; import java.swing.JLabel; public class ShizhongJFrame extends JFrame{ { Public ShizhongJFrame(){ JFrame f=new JFrame(“数字时钟”); f.setLayout(new FlowLayout()); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(200,70); final JLable lable=new JLable; final SimpleDateFormat format=new SimpleDateFormat(“H:m:s”,Locate.CHINA); f.add(lable); Timer time=new Timer(); time.scheduleAtFixedRate(new TimerTask(){ Public void run(){ Label.setText(format.format(new Date(System.currentTimeMillis()))); } },0,1000); f.setVisible(true); } Public staic void main(String arg[]){ New ShizhogJFrame(); } } 三实验内容中遇到的问题、解决方法和体会。

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线程练习题及答案

线程与线程类 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/b99894126.html,ng 包中定义了Runnable 接口和Thread 类。

Java多线程实验报告

实验报告 课程名称: Java语言程序设计 姓名: 学号: 班级: 数学与计算机科学学院

数学与计算机科学学院实验报告实验名称:多线程 指导教师:日期:

if (isPrime) count++; } System.out.println(st + "~" + en + "之间共有" + count + "个质数"); } public static void main(String[] args) { UseThread thread1 = new UseThread(2, 1000); UseThread thread2 = new UseThread(1000, 2000); thread1.start(); thread2.start(); } } 第2题代码: public class Experiment14_2 { public static void main(String[] args) { MyThread t1 = new MyThread("T1"); MyThread t2 = new MyThread("T2"); t1.start(); t2.start(); System.out.println("活动线程数:" + Thread.activeCount()); System.out.println("main()运行完毕"); } } class MyThread extends Thread { public MyThread(String s) { super(s); } public void run() { for (int i = 1; i <= 3; i++) { System.out.println(getName() + "第" + i + "次运行"); try { sleep((int) (Math.random() * 100)); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(getName() + "结束"); } }

实验6:多线程实验 (1)

成绩: 面向对象原理与Java实践课程实验报告 实验6:多线程实验 姓名林浩强 班级网络14-2 学号 14034460220 实验地点软件实验室 实验时间 2016.6.7 指导教师姚明

一、实验目的: ●了解线程调度机制 ●理解线程同步机制 ●掌握线程设计方法 二、实验要求: ●掌握线程创建的方法 ●掌握线程的基本控制方法 ●掌握线程间的同步控制方法 三、实验内容: 1、随机生成1万个整数,利用线程技术计算两种不同排序算法对这些数排序的运行时间。 2、有一水塘,可实现注水和排水操作。当水塘无水时不能对其再进行排水操作,当水塘水满时不能对其再进行注水操作。创建水塘类Pond、注水线程Injection和排水线程Drain,假设注水线程可以在10分钟内将水塘注满水,排水线程可以在10分钟内将水塘的水全排出。试实现水塘的注水和排水过程。 四、设计思路: 首先,第一个实验的需求是随机生成10000个整数并且按两种算法排序,并利用线程的方式计算排序时间。我用的排序算法是冒泡排序和选择排序法,在排序的前后分别用System 类的CurrentTimeMillis()方法获取当前时间的毫秒值,作差求出排序所用的时间。最后在SortDemo类中启动线程即可。、 第二个实验的需求是实现注水和排水的操作,题目中指出“当水塘无水时不能对其再进行排水操作,当水塘水满时不能对其再进行注水操作”,所以我采用了线程的等待唤醒机制来实现。首先在Pond类中声明一个标记变量flag,把注水和排水的操作封装成为功能并加了同步关键字synchronize,方法中运用了同步唤醒机制实现依次的一次一个输出。然后在Injection类和Drain类中调用同步方法即可。最后,在PondDemo中启动线程即可。 五、程序源代码: 实验题目1: package java6_Test; import java.util.Random; public class Sort1 extends Thread { private Object obj = new Object(); //重写run方法 public void run() { //计时开始 long l1 = System.currentTimeMillis(); //用Object类对象设置同步锁 synchronized (obj) { //随机生成10000个数并用相应长度数组来储存这些数

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第七单元练习题-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.进程是由代码、数据、内核状态和一组寄存器组成,而线程是表示程序运行状态的

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