我想调用star()方法在调用await()方法为什么会去执行执行start()方法而不是继续往await()方法之后执行
时间: 2023-12-09 21:05:38 浏览: 25
在Java中,当一个线程调用start()方法时,它会开始执行run()方法中的代码,这个过程是异步的。也就是说,当一个线程调用start()方法后,它并不会等待run()方法执行完毕才返回,而是继续往下执行。
与此相反,当一个线程调用await()方法时,它会被挂起,并且释放对象的锁,直到其他线程调用了相同对象上的notify()或notifyAll()方法,将其唤醒并重新获取对象的锁。
因此,当你在一个线程中调用start()方法后又立即调用await()方法时,这个线程会开始执行run()方法中的代码,并且在某个时刻调用await()方法时被挂起等待唤醒。而在其他线程中调用相同对象上的notify()或notifyAll()方法后,这个线程才会被唤醒并继续执行await()方法之后的代码。
需要注意的是,调用start()方法和调用await()方法是两个不同的操作,它们的执行顺序并不能保证。如果你想让一个线程先执行一些代码后再调用await()方法,可以在run()方法中添加相应的逻辑。
相关问题
为什么我用刚才的方法,执行到await的时候还是会等待一秒,而不是接着执行后面的代码
根据你的描述,你的代码中使用了`async/await`关键字来执行异步操作。在JavaScript中,当遇到异步操作时,它会将其放入事件循环队列中,等待异步操作完成后再执行回调函数。
在你的代码中,使用了`await`关键字来等待异步操作的完成,这会中断当前函数的执行,并将其放回事件循环队列中,等待异步操作完成后再继续执行后面的代码。因此,在执行`await`的时候,会等待一秒钟,直到`Promise`对象的状态变为`resolved`,才会继续执行后面的代码。
如果你希望异步操作不会中断当前函数的执行,可以使用`Promise`的`then`方法或者`async/await`的错误处理机制来处理异步操作的结果。
在async异步方法的内部调用await
在async异步方法的内部调用await可以让方法中的某些操作变为异步操作,让调用该方法的线程能够在等待异步操作完成的同时继续执行其他操作,而不会阻塞线程。当方法内部调用了await关键字,程序会将await之后的操作放入任务队列中,然后执行await之前的代码,并立即返回结果(如果有的话)。当异步操作完成后,程序会从任务队列中取出该操作对应的任务并继续执行。
需要注意的是,在async方法中使用await时,需要确保被await的方法返回的是一个Task或Task<TResult>类型的对象。如果被await的方法不是异步方法,则需要手动将其封装为Task对象,例如使用Task.Run()方法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)