文档库 最新最全的文档下载
当前位置:文档库 › Java多线程习题

Java多线程习题

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关键字?

A.允许两线程并行运行,而且互相通信;

B. 保证在某时刻只有一个线程可访问方法或对象;

C. 保证允许两个或更多处理同时开始和结束;

D. 保证两个或更多线程同时开始和结束。

7、于Java语言的内存回收机制,下列选项中最正确的一项是( )。

A、Java程序要求用户必须手工创建一个线程来释放内存

B、Java程序允许用户使用指针来释放内存

C、内存回收线程负责释放无用内存

D、内存回收线程不能释放内存对象

8、下列哪一个类实现了线程组?()

A、https://www.wendangku.net/doc/2c10371289.html,ng.Objict

B、java.1ang.ThreadGroup

C、Java.1ang.Thread

D、java.1ang.Runnable

9、下列说法中错误的一项是( )。

A、Applet必须全部重写其生命周期方法

B、Applet不必全部重写其生命周期方法

C、Applet中使用了线程,则需要重写相应的生命周期方法

D、stop( )总是在destroy( )之前被调用。

10、在java程序中,下列关于线程的说法错误的是: ( )

A、run方法是运行线程的主体

B、多个进程运行时执行顺序是按顺序执行的

C、如果线程死亡,它便不能运行

D、在java中,高优先级的可运行线程会抢占低优先级线程

11、关于JDBC访问数据库的说法错误的是: ( )

A、建立数据库连接时,必须加载驱动程序,可采用Class.forName()实现

B、用于建立与某个数据源的连接可采用DriverManager类的getConnection方法

C、建立数据库连接时,必须要进行异常处理

D、JDBC中查询语句的执行方法必须采用Statement类实现

12、运行下列程序, 会产生什么结果 ( )

public class X extends Thread implements Runable{

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) 程序会运行和启动

13、下面哪个方法可以在任何时候被任何线程调用? ( )

A) notify() B) wait()

C) notifyAll() D) sleep()

E) yield() F) synchronized(this)

14、下列哪些情况可以终止当前线程的运行? ( )

A) 抛出一个例外时。B) 当该线程调用sleep()方法时。

C) 当创建一个新线程时。D) 当一个优先级高的线程进入就绪状态时。

15、在java程序中,下列关于线程的说法错误的是( )

A)线程启动调用start方法

B)线程的主体是run方法

C)线程运行中调用sleep方法可以进入阻塞状态

D)在java中,优先级的数值为1的线程可以抢占优先级为5的线程的资源

16、下面关于Java中线程的说法不正确的是( )?

A)调用join()方法可能抛出异常InterruptedException。

B)sleep()方法是Thread类的静态方法。

C)调用Thread类的sleep()方法可终止一个线程对象。

D)线程启动后执行的代码放在其run方法中。

17、Thread类用来创建和控制线程,一个线程从下面( )方法开始执行。

A) init() B) start() C) run() D) notifyAll()

18.实现线程体的方式除了继承Thread类,还可以实现接口。

E)A、Cloneable B、Runnable C、Iterable D、Serializable

二、填空题

1、若在高优先级线程的run( )方法中调用___ ___方法,则该线程将让出CPU,使其他___

____的线程获得CPU的使用权。

2、通过实现Runnable接口创建线程的过程是:将实现Runnable的一个___ _______作为

target参数传递给Thread类的____ ______,该对象提供线程体。

3、线程通过方法可以休眠一段时间,然后恢复运行,当时,线程进入死亡状态。

4、编写一个线程可以用和来实现。

5、在执行Java线程的程序中,程序通过调用_______方法启动线程,随后又调用________方法。

6、编写一个线程可以用继承类和实现接口来实现。

7、在执行Java线程的程序中,程序通过调用____ _方法启动线程,随后又调用_____方法。

8、如果几个并发线程对相同的数据对象进行存取,可能导致数据不一致,为避免发生这种情况,需要编程实现线程同步,在执行访问共享数据的代码时对数据加互斥锁,加锁语句的关键字是_______ ___________,如果编程时不注意,加锁可能导致死锁,避免死锁的一般做法是。

9、Java线程程序可以调用___________方法,使线程进入睡眠状态,可以通过调用__ _________________方法设置线程的优先级。

10、通过实现接口可以创建一个包含线程体的类,该接口只申明了一个方法:,假定一个线程体对象为rt,则可以用Thread myThread = 语句来创建一个线程对象,并用语句启动myThread线程对象。

11、阅读下面的程序MyAdd.java,填写划线部分的语句或注释,并写出程序执行结果。public class MyAdd { //继承线程类

static int total = 10;

int n;

public MyAdd(int n){

this.n=n;

}

public void run() {

try{

sleep(n); //含义是:

total=total+n;

System.out.println(total);

}

catch(Exception e){

System.out.println(“EXCEPTION!”);

}

}

public static void main(String[] args) {

MyAdd t1 = new MyAdd(3000);

; //启动线程t1

}

}

12、请完成下列Java程序:运行3个线程,每一个线程有自己的标志,用a,b,c表示,每个线程显示一个”Start”信息和一个”End”信息并且间隔地显示2个“Loop”信息(间隔变化为(0.5~2)秒之间的随机延迟)。

程序运行结果如下:(注:由于时间间隔为随机数,所以,运行结果的顺序不惟一)

a Start

b Start

c Start

b Loop

a Loop

b Loop

b End

a Loop

a End

c Loop

c End

注意:请勿改动main()主方法和其他已有语句内容,仅在下划线处填放适当的语句。 Public class ex2_2 implements Runnable{

static char flag2_2=’a’;

public static void main(String[ ]arg){

ex2_2 obj2_2=new ex2_2 ( );

Thread thread2_2=new Thread(obj2_2);

thread2_2.start();

thread2_2=new Thread(obj2_2);

thread2_2.start();

thread2_2=new‘Thread(obj2_2);

thread2_2.start();

}

public void run(){

char myflag2_2;

synchronized(this){

________________ ;

}

System.out.println(myflag2_2+”Start”);

for(int i=0;i<2;i++){

try{

Thread.sleep(rand(500,2000));

System.out.println(myflag2_2+”Loop”);

}catch(InterruptedException ie){

System.out.prinfln(ie);

}

}

System.out.println(myflag2_2+”End”);

}

final private int rand(int low,int high){

return(________________);

}

}

13、下面的程序利用线程输出从a到z的26个字母,每隔一秒钟输出一个字母,程序不完整,请阅读程序代码,根据注释要求在划线处补充完成代码。

public class Test4 implements Runnable

{

char charArray[]=new char[26];

public Test4()

{

for(int i = 0; i

{

charArray[i]=(char)(i+'a');

}

}

public void run()

{

try

for (int i = 0; i < charArray.length; i++)

{

//休眠一秒钟

System.out.print(charArray[i]);

}

}

catch (InterruptedException e)

{

e.printStackTrace();

}

}

public static void main(String args[])

{

Thread t = //实例化线程对象

//启动线程

}

}

三、判断题

1、启动多线程必须调用start()方法, 如果调用run方法则没有启动新的线程。()

2、run方法是运行线程的主体,若run方法运行结束,线程就消亡了。()

3、线程可以用yield使同优先级的线程运行。 ( )

4、要在程序中实现多线程,必须在源程序前面使用import语句显示的导入Thread类。()

5、一个线程创建并启动后,它将执行自己的run()方法。()

6、线程可以用yield方法使较低优先级的线程运行。()

7、每个Java线程的优先级都设置在常数1~12之间,默认的优先级设置为常数6。()

四、简答题

1、阅读下面的程序,修改程序中错误的地方:

1.public class Test implements Runnable {

2. String str[]=new String[10];

3. for (int i = 0; i < str.length(); i++) {

4.str[i]=i+”-”;

5. }

6. public void run() {

7. try {

8. for (int i = 0; i < str.length(); i++) {

9. sleep(1000);

10. System.out.print(str[i]);

11. }

12. } catch (InterruptedException e) {

13. e.printStackTrace();

14. }

15. }

16. public static void main(String args[]) {

17. Test t = new Test();

18. t.run();

19. }

20.}

2、请说出你所知道的线程同步的方法。

3、sleep() 和 wait() 有什么区别?

4、启动一个线程是用run()还是start()?

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

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

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

8、线程的同步、如何实现线程的同步

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

10、什么是死锁

11、什么是线程饿死,什么是活锁?

12、解释实现多线程的几种方法?

Java 线程可以实现 Runnable 接口或者继承 Thread 类来实现,当你打算多重继承时,优先选择实现 Runnable。

13、Thread.start ()与 Thread.run ()有什么区别?

14、为什么需要 run ()和 start ()方法,我们可以只用 run ()方法来完成任务吗?

15、什么是 ThreadLocal 类,怎么使用它?

16.在静态方法上使用同步时会发生什么事?

17、使用java语言如何创建线程对象?请列出常用的两种方法。

18、线程之间通信的方法有哪几个?分别起到什么作用?

四、编程题

1、应用Java中线程的概念,编写一个Java程序(包括一个主程序类,一个Thread

类的子类)。在主程序中创建 2个线程(用子类),将其中一个线程的优先级设为

10,另一个线程的优先级设为 6。让优先级为10 的线程打印200次“线程 1正在运行”,优先级为6 的线程打印200次“线程 2正在运行”。(提示:设置线程

优先级用setPriority 方法)

2、假设一个银行的ATM机,它可以允许用户存款也可以取款。现在一个账户上有存款200元,用户A和用户B都拥有在这个账户上存款和取款的权利。用户A将存入100元,而用户B将取出50元,那么最后账户的存款应是250元。实际操作过程如下:

(1) 先进行A的存款操作:

1)得到账户的存款数额200,耗时2s。

2)将账户数额增加100,耗时忽略不计

3)将新生成的账户结果300返回到ATM机的服务器上,耗时2s

(2) 再进行B的取款操作:

4)得到增加后账户存款数额300,耗时2s。

5)判断取款额是否小于账户余额,若是,则将账户数额减少50,否则抛出异常信息,

耗时忽略不计。

6)将新生成的账户结果250返回到ATM机的服务器上,耗时2s。

请根据以上要求,将A的操作和B的操作分别用线程来表示,编写一个Java程序实现该功能。

3、请编写一个类,类名为 Sub Thread, 是 Thread 类的子类。该类中定义了

含一个字符串参数的构造方法和 run()方法,方法中有一个 for循环,循环一共

进行5次,循环体先在命令行显示该线程循环了第几次,然后随机休眠小于一秒

的时间,循环结束后显示线程结束信息:线程名+finished 。编写一个

Application程序,并在其中创建 Sub Thread 类的三个线程对象T1,T2,T3,

他们的名称分别为Frist,Second,Third,并启动这三个线程

4、请编写一个类,类名为 MulThread,定义含一个字符串的构造方法,并实现

Runnable接口,接口中的 run()方法如下实现:方法先在命令行显示该线程信息,

然后随机休眠小于一秒的时间,最后显示线程结束信息:finished+线程名。编

写一个Application程序,在其中通过 Runnable 创建MUlThread 类的三个线

程对象T1,T2,T3,并启动这三个线程。

5、假设某家银行可接受顾客的汇款,每进行一步汇款,便可计算出汇款总额。

现有两名顾客,每人都分 3 次.每次 100 元将钱汇入。试编写一个程序,来模拟

顾客的汇款操作。

6、利用多线程求解某范围素数,每个线程负责 1000范围:线程1找1-1000;线

程 2 找 1001-2000;线程 3 找 2001-3000。编程程序将每个线程找到的素数及时

打印。

7、应用Java中线程的概念,编写一个Java程序(包括一个主程序类,一个Thread类的子类)。在主程序中创建2个线程(用子类),将其中一个线程的优先级设为10,另一个线程的优先级设为6。让优先级为10的线程打印200次“线程1正在运行”,优先级为6的线程打印200次“线程2正在运行”。(提示:设置线程优先级用setPriority方法)

8、编写一个程序,扫描本机的小于5000的端口,显示正在使用的端口号。要求采用5个线程实现,每个线程扫描1000个端口。

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

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

java多线程面试题

java多线程面试题 1.什么是多线程编程?什么时候使用? 多线程一般用于当一个程序需要同时做一个以上的任务。多线程通常用于GUI交互程序。一个新的线程被创建做一些耗时的工作,当主线程保持界面与用户的交互。 2.为什么wait(),notify()和notifyall()函数定义在Object类里面? 因为所有类都是继承于Object类,这样所有类就可以简单的进行多线程编程了。 3.wait()方法和sleep()方法有什么不同? sleep()方法执行后仍然拥有线程,只是延时。而wait方法放弃了线程控制,其它线程可以运行,想要再次运行是要重新开始。 4.Thread和Runnable有什么不同? JA V A线程控制着程序执行的主路径。当你用java命令调用JVM时,JVM创建了一个隐式线程来执行main方法。Thread类提供了主线程调用其它线程并行运行的机制。 Runnable接口定义了一个能被Thread运行的类。实现Runnable的类只需要实行run方法。可以很灵活的扩展现在的已经继承自其它父类的类。而thread则不可以,因为java 只允许继承一个父类。 Runnable可以共享数据,Thread是一个类,而Runnable是一个接口 5.我可以重载start()方法么? 可以重载,重载后还要重载run()方法, 9.编译运行下面的代码会发生什么? 1.public class Bground extends Thread{ 2.public static void main(String argv[]) 3.{ 4. Bground b = new Bground(); 5. b.run(); 6.} 7.public void start()

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 {}

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.wendangku.net/doc/2c10371289.html,=name; this.time=time; } public void run(){ try{ Thread.sleep(this.time); } catch(Exception e){ } System.out.println(https://www.wendangku.net/doc/2c10371289.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 面试题总览(书签完整版)

JAVA面试题总览 JAVA基础 1.JAVA中的几种基本数据类型是什么,各自占用多少字节。 2.String类能被继承吗,为什么。 3.String,Stringbuffer,StringBuilder的区别。 4.ArrayList和LinkedList有什么区别。 5.讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数, 字段,当new的时候,他们的执行顺序。 6.用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么, 他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。 7.JAVA8的ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计, 你如何设计。 8.有没有有顺序的Map实现类,如果有,他们是怎么保证有序的。 9.抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接 口么。 10.继承和聚合的区别在哪。 11.IO模型有哪些,讲讲你理解的nio,他和bio,aio的区别是啥,谈谈reactor模型。 12.反射的原理,反射创建类实例的三种方式是什么。 13.反射中,Class.forName和ClassLoader区别。 14.描述动态代理的几种实现方式,分别说出相应的优缺点。 15.动态代理与cglib实现的区别。 16.为什么CGlib方式可以对接口实现代理。 17.final的用途。 18.写出三种单例模式实现。 19.如何在父类中为子类自动完成所有的hashcode和equals实现?这么做有何优劣。 20.请结合OO设计理念,谈谈访问修饰符public、private、protected、default在应 用设计中的作用。 21.深拷贝和浅拷贝区别。 22.数组和链表数据结构描述,各自的时间复杂度。 23.error和exception的区别,CheckedException,RuntimeException的区别。 24.请列出5个运行时异常。 25.在自己的代码中,如果创建一个https://www.wendangku.net/doc/2c10371289.html,ng.String类,这个类是否可以被类加载器加 载?为什么。

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

实验三:基于多线程的Socket通信 班级:计科F1202 姓名:黄浩翔学号:201216010110 实验目的:通过将Socket通信和多线程的知识结合应用,掌握基于多线程的通信设计方法。 实验内容:创建客户端Socket;创建服务器端Socket;建立基于多线程的服务器段监听和数据处理机制;Socket的启动和管理。 实验步骤: //服务端 package基于多线程Socket通信; import https://www.wendangku.net/doc/2c10371289.html,.ServerSocket; import https://www.wendangku.net/doc/2c10371289.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;

多线程常见面试题

1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完 后执行? T1.start(); T1.join(); T2.start(); T2.join(); T3.start() 2)11) 为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run() 方法? start()方法最本质的功能是从CPU中申请另一个线程空间来执行run()方法中的代码,它和当前的线程是两条线,在相对独立的线程空间运行 ,也就是说,如果你直接调用线程对象的run()方法,当然也会执行,但那是在当前线程中执行,run()方法执行完成后继续执行下面的代码.而调用start()方法后,run()方法的代码会和当前线程并发(单CPU)或并行(多CPU)执行。 调用线程对象的run方法不会产生一个新的线程 3)在java中wait和sleep方法的不同? sleep()睡眠时,保持对象锁,仍然占有该锁; 而wait()睡眠时,释放对象锁。 sleep()使当前线程进入停滞状态(阻塞当前线程),让出CUP的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会; sleep()是Thread类的Static(静态)的方法;因此他不能改变对象的机锁,所以当在一个Synchronized块中调用Sleep()方法是,线程虽然休眠了,但是对象的机锁并木有被释放,其他线程无法访问这个对象(即使睡着也持有对象锁)。 在sleep()休眠时间期满后,该线程不一定会立即执行,这是因为其它线程可能正在运行而且没有被调度为放弃执行,除非此线程具有更高的优先级。 wait()方法是Object类里的方法;当一个线程执行到wait()方法时,它就进入到一个和该对象相关的等待池中,同时失去(释放)了对象的机锁(暂时失去机锁,wait(long timeout)超时时间到后还需要返还对象锁);其他线程可以访问; wait()使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中的线程。 wiat()必须放在synchronized block中,否则会在program runtime时扔出”https://www.wendangku.net/doc/2c10371289.html,ng.IllegalMonitorStateException“异常。 4)为什么wait, notify 和notifyAll这些方法不在thread类里面? 因为这些是关于锁的 而锁是针对对象的 锁用于线程的同步应用 决定当前对象的锁的方法就应该在对象中吧 我是这么理解的希望对你有帮助

Java多线程技术及案例

Java多线程技术及案例 进程和线程: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。 线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 多进程是指操作系统能同时运行多个任务(程序)。 多线程是指在同一程序中有多个顺序流在执行。 Java中多线程的多种实现方式 Java中有多种多线程实现方法,主要是继承https://www.wendangku.net/doc/2c10371289.html,ng.Thread类的方法和 https://www.wendangku.net/doc/2c10371289.html,ng.Runnable接口的方法。 继承Thread类 Thread是https://www.wendangku.net/doc/2c10371289.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多线程实验报告

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实验五线程

实验五线程 一实验要求 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多线程面试题50题

Java多线程50题 1)什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。 2)线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。更多详细信息请点击这里。 3)如何在Java中实现线程? https://www.wendangku.net/doc/2c10371289.html,ng.Thread类的实例就是一个线程但是它需要调用https://www.wendangku.net/doc/2c10371289.html,ng.Runnable接口来执行,由于线程类本身就是调用的 Runnable接口所以你可以继承https://www.wendangku.net/doc/2c10371289.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语言程序设计 姓名: 学号: 班级: 数学与计算机科学学院

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

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() + "结束"); } }

2019最新Java面试题,常见面试题及答案汇总

ava最新常见面试题+ 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示: 可能对于初学者不需要后面的框架和JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。 适宜阅读人群 需要面试的初/中/高级java 程序员 想要查漏补缺的人 想要不断完善和扩充自己java 技术栈的人 java 面试官 具体面试题 下面一起来看208 道面试题,具体的内容。 一、Java 基础 1.JDK 和JRE 有什么区别? 2.== 和equals 的区别是什么? 3.两个对象的hashCode()相同,则equals()也一定为true,对吗? 4.final 在java 中有什么作用? 5.java 中的Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用final 修饰吗?

14.接口和抽象类有什么区别? 15.java 中IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和Hashtable 有什么区别? 22.如何决定使用HashMap 还是TreeMap? 23.说一下HashMap 的实现原理? 24.说一下HashSet 的实现原理? 25.ArrayList 和LinkedList 的区别是什么? 26.如何实现数组和List 之间的转换? 27.ArrayList 和Vector 的区别是什么? 28.Array 和ArrayList 有何区别? 29.在Queue 中poll()和remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和ListIterator 有什么区别? 34.怎么确保一个集合不能被修改?

实验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个数并用相应长度数组来储存这些数

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线程程序设计(小时钟)实验报告(附完整代码)

线程程序设计 一、课题内容和要求 内容:设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动。 要求:本实验旨在通过实验,培养学生将JAVA 线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中设计多线程程序的能力。 二、设计思路分析 class Clock:一个指针式时钟的主类 class Layout: 添加窗口和时钟组件 class ClockPaint:定义时钟组件 三、概要设计 public class Clock extends JFrame { public static void main(String[] s) ; } class Layout extends JFrame { public Layout(); } class ClockPaint extends JPanel implements Runnable { int x, y, r; int h, m, s; double rad = Math.PI / 180; public ClockPaint(int x, int y, int r); public void paint(Graphics g); public void run(); } 时钟的绘制:

运行时钟: 四、详细设计 import java.awt.*; import javax.swing.*; import java.util.*; public class Clock extends JFrame { public static void main(String[] s) { new Layout(); } } class Layout extends JFrame {// 添加窗口和时钟组件public Layout() { ClockPaint cp = new ClockPaint(20, 20, 70); add(cp);

相关文档