经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
经典多线程面试题
来源:cnblogs  作者:yaoleilovejava  时间:2018/10/20 15:37:49  对本文有异议

题目:子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程100次,如此循环50次,请写出程序。

  1. 1 public class TraditionalThreadSynchronized2 {
  2. 2 public static void main(String[] args) throws Exception {
  3. 3 Demo1 d1 = new Demo1();
  4. 4 // 子线程
  5. 5 new Thread(new Runnable() {
  6. 6      
  7. 7 @Override
  8. 8 public void run() {
  9. 9 for (int i = 1; i <= 50; i++) {
  10. 10 try {
  11. 11 d1.sub(i);
  12. 12 } catch (InterruptedException e) {
  13. 13 // TODO Auto-generated catch block
  14. 14 e.printStackTrace();
  15. 15 }
  16. 16 }
  17. 17 }
  18. 18 }).start();
  19. 19
  20. 20 // 主线程
  21. 21 for (int i = 1; i <= 50; i++) {
  22. 22 d1.main(i);
  23. 23 }
  24. 24
  25. 25 }
  26. 26 }
  27. 27
  28. 28 class Demo1 {
  29. 29 public Boolean mainDoIt = false;标志主线程方法是否被调用
  30. 30 // 子线程循环10次
  31. 31 public synchronized void sub(int i) throws InterruptedException {
  32. 32 while(mainDoIt) {
  33. 33 this.wait();
  34. 34 }
  35. 35 for (int j = 1; j <= 10; j++) {
  36. 36 System.out.println("sub" + j + "---SUB" + i);
  37. 37 }
  38. 38 mainDoIt=true; //子线程调用完毕
  39. 39 this.notify();// 唤醒主线程
  40. 40 }
  41. 41
  42. 42 // 主线程循环100次
  43. 43 public synchronized void main(int i) throws InterruptedException {
  44. 44 while(!mainDoIt) {
  45. 45 this.wait();
  46. 46 }
  47. 47 for (int j = 1; j <= 100; j++) {
  48. 48 System.out.println("main" + j + "---MAIN" + i);
  49. 49 }
  50. 50 mainDoIt = false;//主线程调用完毕
  51. 51 this.notify();// 唤醒子线程
  52. 52
  53. 53 }
  54. 54 }

解题思路:子线程语主线程为互斥,可用SYNCHRONIZED。为了体现Java 的高类聚性,最好能将共同数据或共同方法归为同一类,即编写一个类来存放两个同步方法。要让他们交替进行,可用信号量控制,并用wait  ,notify 进行线程间通信。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号