1. 程式人生 > 其它 >Python--條件判斷與迴圈

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