最近偶遇这道题,网上相似的题都是循环次数不一样。然而我百度搜到的论坛或者博客感觉都不太对,运行有穿插。请给出正确结果。

我们假使所有人都引入了业务对象。

并且我有疑问?感觉题目本意不是new Thread()放在前面。

网上有人做法是用标志位防止虚假唤醒,还有锁放在方法上的。是否有道理?

public class Test {

public static void main(String[] args) throws InterruptedException {

final Business business = new Business();

// 子线程

new Thread(new Runnable() {

@Override

public void run() {

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

try {

business.sonBusiness(i);

} catch (InterruptedException e) {

}

}

}

}).start();

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

business.mainBusiness(i);

}

}

}

class Business {

public void mainBusiness(int i) throws InterruptedException {

synchronized (this) {

for (int j = 1; j <= 20; j++) {

System.out.println("主线程第" + i + "轮,第" + j + "次");

}

this.notify();

this.wait();

}

}

public void sonBusiness(int i) throws InterruptedException {

synchronized (this) {

for (int j = 1; j <= 30; j++) {

System.err.println("子线程第" + i + "轮,第" + j + "次");

}

this.notify();

this.wait();

}

}

}

java中主线程首先执行_java经典面试题:子线程先运行30次主线程,主线程40次,如此循环50次?...相关推荐

  1. Java中主线程如何捕获子线程抛出的异常

    Java中主线程如何捕获子线程抛出的异常 参考文章: (1)Java中主线程如何捕获子线程抛出的异常 (2)https://www.cnblogs.com/jpfss/p/10272885.html ...

  2. Java中主线程如何捕获子线程抛出 ...

    这么来看待这个问题.首先明确线程代码的边界.其实很简单,Runnable接口的run方法所界定的边界就可以看作是线程代码的边界.Runnable接口中run方法原型如下:     <<   ...

  3. 【Java 多线程】Java中主线程如何捕获子线程抛出的异常

    首先明确线程代码的边界.其实很简单,Runnable接口的run方法所界定的边界就可以看作是线程代码的边界.Runnable接口中run方法原型如下: public void run(); 而所有的具 ...

  4. [转]Java中主线程如何捕获子线程抛出的异常

    这么来看待这个问题.首先明确线程代码的边界.其实很简单,Runnable接口的run方法所界定的边界就可以看作是线程代码的边界.Runnable接口中run方法原型如下:     <<   ...

  5. Java中控制多线程顺序执行

    Java中控制多线程顺序执行 一.概述 二.普通示例 三.控制示例 3.1.设置线程优先级 3.2.使用线程类的join() 3.2.1.在主线程join() 3.2.2.在子线程join() 3.3 ...

  6. Java实现主线程与子线程访问临界资源同步模拟

    1.问题描述 使用不同的方法完成主线程与子线程的同步,要求子线程先执行,在主线程中使用Thread类创建一个子线程,主线程创建后进入阻塞状态,直到子线程运行完毕后唤醒主线程. 2.代码实现 (2.1) ...

  7. c语言主线程退出子线程,简单了解C语言中主线程退出对子线程的影响

    这篇文章主要介绍了简单了解C语言中主线程退出对子线程的影响,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于程序来说,如果主进程在子进程还未结束时 ...

  8. java中的case1怎么说_Java 中的 CAS 简述及原理解析

    一.CAS 是什么? CAS(Compare And Swap),比较并交换,它是一条CPU并发原语.它的功能是判断内存某个位置的值是否为预期值,如果是则更新为新的值,这个过程是原子的.1 publi ...

  9. java中如何生成可执行的jar文件

    java中如何生成可执行的jar文件最简单的方法就是:jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$my ...

最新文章

  1. 【网络安全】一些webshell免杀的技巧
  2. 剑指offer面试题15:链表中倒数第K个节点
  3. 如何用 Nacos 构建服务网格生态?
  4. 《大型网站技术架构》1:概述
  5. 设计模式系列之七大原则之——迪米特法则
  6. 【深度学习】吴恩达网易公开课练习(class1 week3)
  7. 单片微型计算机简称单片机是指集成,什么是单片微型计算机 -解决方案-华强电子网...
  8. leetcode743. 网络延迟时间(迪杰斯特拉算法)
  9. java 跨域 下载文件_文件下载重命名(可跨域)
  10. python在命令端口运行脚本_扫描端口占用情况的python脚本
  11. MyBatis 延迟加载的三种加载方式深入,你get了吗?
  12. 【CMAKE系列】CMAKE外部工程引用及编译打印
  13. idm下载百度网盘有限制 提示403错误 下载显示没有权限404,最新的解决办法教程
  14. Android攻略--单位转化器UC--Units Converter(学习笔记)
  15. 使用LordPE和Import REC脱壳
  16. html网页实现分享功能,H5网页实现微信分享功能
  17. 弘辽科技:限制店铺流量上涨的七大原因
  18. 渝粤题库 陕西师范大学 《文学概论》作业
  19. 天天打排位,你知道王者荣耀的皮肤怎么测试吗?
  20. linux 显卡 1050ti,MAX-Q终于出中端卡了 GTX1050Ti MAX-Q显卡曝光

热门文章

  1. Zencart 给DHL运费模块增加一个分区的方法
  2. 通向成功的23个方法
  3. oracle 数据库 锁
  4. Jmeter操作mysql数据库测试
  5. Web开发模式(MVC设计模式)
  6. 项目中的那些事---下载pdf文件
  7. struts2 Action获取表单数据
  8. mysql sql语句使用技巧
  9. spring-core
  10. 记一次vue 普通异步请求微信二进制二维码 乱码 问题解决然后渲染