多线程练习题目 联系客服

发布时间 : 星期一 文章多线程练习题目更新完毕开始阅读14e9c3c8da38376baf1fae88

4.Java中线程的优先级从低到高以整数0—9表示( )

5. 从一个同步语句块中退出来不会直接引起线程停止执行( ) 6.线程的阻塞是指暂停一个线程的执行以等待某个条件发生( ) 7.优先级只能在线程启动前设置( )

8.当生成守护线程的线程结束时,此守护线程会随之消失( )

9.线程之间的通信可以通过共享数据使线程互相交流,也可以通过线程控制方法使线程互相等待( )

10.Object类定义了线程同步与交互的方法 ( )

11. 线程一旦被创建,则自动运行 ( )

12. 线程创建后需要调用start()方法,将线程置于可运行状态 ( ) 13. Thread类中没有定义run()方法 ( ) 14. 线程开始运行时,是从start()方法开始运行的( ) 15. 一个进程可以创建多个线程 ( ) 16. 代表优先级的常数值越大优先级越低 ( )

17. 程序中可能出现一种情况:多个线程相互等待对方持有的锁,而在得到对方的锁之前都不

会释放自己的锁,这就是死锁。 ( )

18. 临界区可以是一个语句块,但是不可以是一个方法 ( ) 19. 释放锁的时候,应该按照加锁顺序的逆序进行 ( )

20. 在对象串行化中,可以用来保护类中敏感信息的关键字是protected ( )

四、简答题(回答要点,并简明扼要作解释)10 1.什么是线程?它和进程有什么区别?

2.简述线程的生命周期。

3.Runnable接口中包括哪些抽象方法?Thread类有哪些主要域和方法?

4.创建线程有几种方式?试写出使用这些方式创建线程的一般模式。为什么有时候必须采用其中一种方式?

5.简述线程的同步控制机制。

6. 创建线程有哪两种方法?

7. 什么是死锁?

8. 线程有哪三种基本状态?这几种状态是怎样相互转换的?(可画图表示)

9. Java语言中的线程包括哪三部分?

10. 什么是进程?与线程有何区别?

五、程序设计题

1.编写一个多线程类,该类的构造方法调用Thread类带字符串参数的构造方法。建立自己的线程名,然后随机生成一个休眠时间,再将自己的线程名和休眠多长时间显示出来。该线程运行后,休眠一段时间,该时间就是在构造方法中生成的时间。最后编写一个测试类,创建多个不同名字的线程,并测试其运行情况。

2.编写一个程序,测试异常。该类提供一个输入整数的方法,使用这个方法先输入两个整数,再用第一个整数除以第二个整数,当第二个整数为0时,抛出异常,此时程序要捕获异常。

3.编写一个用线程实现一个数字时钟的应用程序。该线程类要采用休眠的方式,把绝对大部分时间让系统使用。

4.编写一个使用继承Thread类的方法实现多线程的程序。该类有两个属性,一个字符串代表线程名,一个整数代表该线程要休眠的时间。线程执行时,显示线程名和休眠时间。 5.应用继承类Thread的方法实现多线程类,该线程3次休眠若干(随机)毫秒后显示线程名和第几次执行。

6.请通过实现Runnable接口和继承Thread类分别创建线程,要求:除了main线程之外,还要创建一个新的线程。Main线程重复100次“main“,新线程重复100次输出“new”。

7. 为了使下面的程序能够输出“running”,请在注释处填写相关语句代替注释//A。 public class Test implements Runnable{ public static void main(String args[]){ Test test=new Test(); Thread t=new Thread(test); //A } public void run(){ System.out.println(\); } void go(){ start(1); } void start(int i){ } } 8. 在下列程序的横线处填入正确的语句 public class Test { public static void main(String args[]) { Thread t1 = new subTread(\); Thread t2 = new subTread(\); t1.start(); t2.start(); } } class subTread extends Thread { public subTread(String s) { } public void run() { System.out.println(\ + getName()); try { sleep((int) (Math.random() * 1000)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(\结束!\ + getName()); } } 9. 请创建一个线程,指定一个限定时间(如60s),线程运行时,大约每3s输出1次当前所剩时间,直至给定的限定时间用完。考点:sleep方法

10.以下是一个模拟订票业务的程序。BookingClerk类代表自动售票员,其中包含一个订票(booking)方法。假设一开始有10张票可预定。程序运行时产生两个订票客户同时自动向自动售票员订票。请问会出现什么错误?该如何修改?考点:临界区与互斥 public class Test { public static void main(String args[]) { BookingClerk bt = new BookingClerk(); new BookingTest(bt, 7); new BookingTest(bt, 5); } } class BookingClerk { int remainder = 10; void booking(int num) { if (num <= remainder) { System.out.println(\预定\ + num + \张\); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } remainder = remainder - num; } else { System.out.println(\剩余票不够,无法预定\); } System.out.println(\还剩\+remainder+\票\); } } class BookingTest implements Runnable { BookingClerk bt; int num; BookingTest(BookingClerk bt, int num) { this.bt = bt; this.num = num; new Thread(this).start(); } public void run() { bt.booking(num); } } 11 模拟一个生产者/消费者, 并且有两个条件限制: 一是库存有限制,不能无限制地生产(消费者消费); 二是产量有限制,一旦完成了设定的产量, 生产者线程就退出,当库存达到下限时生产者继续生产。