Python--條件判斷與迴圈
同步(Synchronous)
非同步(Asynchronous)
在開發中,我們可能經常會遇到一些需要執行時間很長的任務,如果放在前端,會讓使用者一直卡在那兒等待或者一直轉圈圈,體驗非常不好。因此使用非同步方法可以把耗時的任務扔到後臺,而前端給使用者立即返回,待使用者需要檢視結果時,點選檢視即可,並且可以隨時看到任務執行的狀態。
原來的
srvice:
@Service public class AsyncService { public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("資料正在處理。。。。"); }
controller:
@RestController
public class AsyncController {
@Autowired
AsyncService asyncService;
@RequestMapping("/hello")
public String hello(){
asyncService.hello();//呼叫這個方法會停止三秒
return "OK";
}
}
啟動後,訪問localhost:8080/hello需要等到3秒才會加載出"ok"
加了非同步註解後
service: @Async
@Service
public class AsyncService {
@Async //告訴spring這是一個非同步的方法
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("資料正在處理。。。。");
}
要使用非同步註解,需要在主方法上開啟非同步註解:@EnableAsync
@EnableAsync //開啟非同步註解功能
@SpringBootApplication
public class Springboot09Application {
public static void main(String[] args) {
SpringApplication.run(Springboot09Application.class, args);
}
}
此時,不需要等待三秒才顯示"ok",會立即加載出來。而 Thread.sleep(3000)會在後臺執行
-
同步任務是那些在主執行緒上排隊執行的任務。只有前一個任務執行完畢了,才會開始執行後面一個任務,在所有任務沒有執行完之前,不能執行任務後面的程式碼。
-
非同步任務是那些不進入主執行緒、而進入任務佇列的任務。只有當引擎認為某個非同步任務可以執行了(比如Ajax操作從伺服器得到了結果),該任務(採用回撥函式的形式)才會進入主執行緒執行。排在非同步任務後面的程式碼,不用等待非同步任務結束才執行,而會馬上執行。也就是說非同步任務不具有“堵塞”效應。
-
舉例說明:比如Ajax操作既可以同步任務處理,也可以非同步任務處理。這由開發者決定。如果是同步任務,主執行緒就等著Ajax操作返回結果,再往下執行;如果是非同步任務,主執行緒在發出Ajax請求以後,就直接往下執行,執行後面的程式碼,等到Ajax操作有了結果,主執行緒再執行對應的回撥函式。
參考連結:https://blog.csdn.net/m0_51278137/article/details/120344256