Java多线程习题 联系客服

发布时间 : 星期一 文章Java多线程习题更新完毕开始阅读2895b116cc7931b765ce15f6

{ 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个端口。