1. package thread;
  2.  
  3. /**
  4. * 需求:线程编程:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次。
  5. * @author zhongfg
  6. * @date 2015-06-16
  7. */
  8. class Business { // 控制由谁执行
  9. boolean bShouldSub = true;
  10.  
  11. public synchronized void MainThread(int i) {
  12. if (bShouldSub) {
  13. try {
  14. this.wait();
  15. } catch (InterruptedException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. for (int j = 0; j < 4; j++) {
  20. System.out.println(Thread.currentThread().getName() + "-->i=" + i
  21. + ",j=" + j);
  22. }
  23. bShouldSub = true;
  24. this.notify();
  25. }
  26.  
  27. public synchronized void SubThread(int i) {
  28. if (!bShouldSub) {
  29. try {
  30. this.wait();
  31. } catch (InterruptedException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. for (int j = 0; j < 2; j++) {
  36. System.out.println(Thread.currentThread().getName() + "->i=" + i
  37. + ",j=" + j);
  38. }
  39. bShouldSub = false;
  40. this.notify();
  41. }
  42. }
  43.  
  44. public class ThreadInterview {
  45. public static void main(String args[]) {
  46.  
  47. ThreadInterview tp = new ThreadInterview();
  48. tp.init();
  49. }
  50.  
  51. public void init() {
  52.  
  53. final Business business = new Business();
  54. new Thread(new Runnable() {
  55.  
  56. public void run() {
  57. for (int i = 0; i < 3; i++) {
  58. // 调用子线程中的方法
  59. business.SubThread(i);
  60. }
  61. }
  62. }).start();
  63.  
  64. for (int i = 0; i < 3; i++) {
  65. business.MainThread(i);
  66. }
  67. }
  68. }
  69.  
  70. 运行结果:
  71. Thread-0->i=0,j=0
  72. Thread-0->i=0,j=1
  73. main-->i=0,j=0
  74. main-->i=0,j=1
  75. main-->i=0,j=2
  76. main-->i=0,j=3
  77. Thread-0->i=1,j=0
  78. Thread-0->i=1,j=1
  79. main-->i=1,j=0
  80. main-->i=1,j=1
  81. main-->i=1,j=2
  82. main-->i=1,j=3
  83. Thread-0->i=2,j=0
  84. Thread-0->i=2,j=1
  85. main-->i=2,j=0
  86. main-->i=2,j=1
  87. main-->i=2,j=2
  88. main-->i=2,j=3

Java线程面试题:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次的更多相关文章

  1. java 多线程 Thread.join子线程结束父线程再运行;join(long):等待超时毫秒数

    Join的使用 目的:当子线程运行结束后,父线程才能再继续运行 /** * @ClassName ThreadJoinExample * @projectName: object1 * @author ...

  2. 通过使用Web Workers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线程(通常是UI线程)不会因此被阻塞/放慢。

    Web Workers API - Web API 接口参考 | MDNhttps://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API ...

  3. Java多线程面试题:线程锁+线程池+线程同步等

    1.并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行. 2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量 ...

  4. java多线程面试题_线程并发面试题

    1.什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个 ...

  5. Java 并发编程中的 CountDownLatch 锁用于多个线程同时开始运行或主线程等待子线程结束

    Java 5 开始引入的 Concurrent 并发软件包里面的 CountDownLatch 其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是 ...

  6. java主线程结束和子线程结束之间的关系

    (一)Main线程是个非守护线程,不能设置成守护线程. 这是因为,main线程是由java虚拟机在启动的时候创建的.main方法开始执行的时候,主线程已经创建好并在运行了.对于运行中的线程,调用Thr ...

  7. [Java][Android] 多线程同步-主线程等待全部子线程完毕案例

    有时候我们会遇到这种问题:做一个大的事情能够被分解为做一系列相似的小的事情,而小的事情无非就是參数上有可能不同样而已! 此时,假设不使用线程,我们势必会浪费许多的时间来完毕整个大的事情.而使用线程的话 ...

  8. Java多线程之以7种方式让主线程等待子线程结束

    记一次主线程等待子线程结束的多种方法的学习 在学习多线程时,最开始遇到的问题其实是"计算子线程运行时间",写到最后发现本文和标题更为符合,但是仍然基于问题:"在主线程中获 ...

  9. C#主线程等待子线程运行结束

    佐左佑右 原文 C#主线程等待子线程运行结束 由于主程序中调用matlab的dll文件进行计算要用较长的时间,主界面会有很长时间的卡顿,造成的用户感受十分不好,因此我想在调用时,将调用放入子线程中,然 ...

随机推荐

  1. 单核时代,PHP之类多线程或者多进程的,是怎么处理并发的?是排队吗?

      答案是:的确就是排队.但是并不是一定要处理完请求1才能去处理请求2:实际上请求的处理过程中,有很多的时间是耗在IO等其他地方,这时可以切换去处理其他请求,把等待的时间可以充分利用起来,达到更高的吞 ...

  2. VUE -- 用组件上传文件和用xmlrequest上传

    xmlrequest: sendForm(str, types) { var form = this.$refs.ipas_form; var oOutput = document.querySele ...

  3. WEB将本地项目添加到git

    前提下载好git bush1.找到对应的文件夹git init2.Windows下打开Git Bash$ ssh-keygen -t rsa -C "myaccount@example.co ...

  4. 访问php程序无法解析,排查步骤

    1.安装lamp后,php程序没有被解析 (1) apachectl -M 看是否加载了libphp5.so ,apachectl -M 这个命令查看动态libphp5.so的是否由apache加载 ...

  5. securecrt中进入uboot命令行时,出现无法键入任何指令的问题解决方法

    securecrt中进入uboot命令行时,出现无法键入任何指令的问题解决方法 可能出现以下几种情况 1.securecrt在创建连接时,忘记取消勾选流控: 2.usb转串口线坏了3.uboot有问题 ...

  6. 【HTML 元素】嵌入图像

    img元素允许我们在HTML文档里嵌入图像. 要嵌入一张图像需要使用src和alt属性,代码如下: <img src="../img/example/img-map.jpg" ...

  7. NYOJ82 迷宫寻宝(一)【BFS】

    迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 一个叫ACM的寻宝者找到了一个藏宝图.它依据藏宝图找到了一个迷宫,这是一个非常特别的迷宫,迷宫里有N个 ...

  8. iOS学习笔记之蓝牙(有关蓝牙设备mac地址处理)

    原文: http://blog.sina.com.cn/s/blog_6f2f0bed0102xn0e.html

  9. h5+ 管理设备信息

    Device模块管理设备信息,用于获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 1.属性 1.1.imei: 设备的国际移动设备身份码, ...

  10. java模拟异步消息的发送与回调

      http://kt8668.iteye.com/blog/205739 本文的目的并不是介绍使用的什么技术,而是重点阐述其实现原理. 一. 异步和同步 讲通俗点,异步就是不需要等当前执行的动作完成 ...