是否java的程序调用必须要使用线程才会异步执行?

我对程序执行有一些概念认知不清,想请教基础好的同学一些问题。
以下是我的认知:
1、方法内执行多个类的方法,应该是必须等前一个方法执行完了(有执行结果了)之后才会之后后面的代码。这个可以称之为同步的代码执行。
2、当启动新的线程时,程序不需要等到新的线程里的代码执行完之后,才会继续执行主线程。而是启动完新的线程之后继续执行主线程后面的代码。
以下是我的问题:
1、对于普通的方法(代码就是本地执行,类似new 、syso这样的代码),我觉得没问题。但假如方法里是执行mybatis(或者其它我不了解的第三方调用)的程序,
如:

syncOborMDMMapper.updateHospital();
syncOborMDMMapper.updateProduct();
syncOborMDMMapper.updateProductLine();

而这些方法执行的是存储过程:

{call sync_hospital}

我不知道这种情况,是否也是同步的呢,必须等到updateHospital这个存储过程执行完了之后才会之后后面的存储过程呢?
2、其实这个问题我可以本地去测试,通过log日志去认知,但其实我想了解的是,是否在java里,我只要不是启动新的线程,方法调用本身必须等到这个方法执行完了之后才会执行它所在的块级区域后面的代码?这套机制不会受方法具体是做什么的。
3、也就是说,以后只要我看到代码没有显示的启动线程,则必然是同步的,无需多考虑其它情况

2个回答

这个不一定,单线程也可以异步。典型的使用定时器。

strongxqb
脸白的白脸 你好,请问你说的定时器有具体的指代吗?java中有定时器吗?quartz的job我有接触过,但是是定时任务,这个算定时器吗?
3 年多之前 回复

这里有两个概念,“执行完了”和“返回”。
JAVA的代码是同步的,必须等上一个方法“返回”,才能开始执行下一个方法。“返回”就是return,或者void类型的方法遇到方法结尾的 '}'。
但“返回”了不一定意味着“执行完了”。
想判断一个方法是否“返回”很容易,但想知道它是否“执行完了”就必须通过栈一层层地向下找,看有没有任何异步代码。

strongxqb
脸白的白脸 请问你说的异步代码指的什么?就你所知道的是否只有起一个新的线程呢?
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问