Java內部類實現偽方法級多線程


最近碰到一個問題,就是用戶在填寫相關信息提交后,后台需要將一些文件同步到另外一台服務器,而這個時候,由於用的是spring的框架,導致前端頁面需要等待文件同步完成,才能彈出提示信息。相信大家在很多時候都會碰到這種問題,比如收發郵件,也會等待郵件發送完成,等等。於是便很自然的想到多開一個線程去處理一些比較耗時的任務。但是java本身只提供類級別的多線程,如下:

  1. 繼承Thread類
    class A extends Thread {
        public void run() {
            System.out.println("A");
        }
    
        public static void main(String[] args) {
            A a = new A();
            a.run();
        }
    }

     

  2. 實現Runnable接口
    class B implements Runnable {
        public void run() {
            System.out.println("B");
        }
    
        public static void main(String[] args) {
            B b = new B();
            Thread thread = new Thread(b);
            thread.start();
        }
    }

     

  3. Executor

    可以更方便的創建管理線程池,后期我會用一篇博客詳細講述。

 

可以看到,這些多線程的實現方式都是集中在類級別上的,必須要一個類實現或繼承相應的接口和類,並且重寫run方法,才能啟動使用。但是,假設在spring的一個類中:

@RequestMapping("/c")
public class C {
    //主方法
    @RequestMapping("c1")
    public void c1() {
        //需要開啟另一個線程調用c2方法,從而不用等待c2執行完畢
        c2();
    }

    //需要實現多線程
    public void c2() {
        //調用c3
        c3();
    }

    //文件同步方法,需要后台執行
    public void c3() {

    }
}

 

我們要在c2方法中調用后台方法,那么就需要在c1類中調用c2,從而開啟另一個線程去執行后台業務代碼,而不用等待c3完成

通過上面的幾種實現多線程的方式,這個問題是比較難解決的,或者我們新建另一個類去實現多線程

  

public class MultiThread implements Runnable {
    //后台業務代碼
}

 

然后在c類中調用MultiThread開啟多線程。但是既然我們的標題是使用內部類,那么我們來看看用內部類這個問題就會變得比較簡單:

 

內部類實現偽方法級多線程:

我們還是用上面的例子來說明:

@RequestMapping("/c")
public class C {
    //主方法
    @RequestMapping("c1")
    public void c1() {
        //需要開啟另一個線程調用c2方法,從而不用等待c2執行完畢
        //c2();

        (new MultiThreadInnerClass()).start();
    }

    //需要實現多線程
    public void c2() {
        //調用c3
        c3();
    }

    //創建內部類集成Thread,調用c3,開啟多線程
    class MultiThreadInnerClass extends Thread{
        public void run {
            c3();
        }
    }

    //文件同步方法,需要后台執行
    public void c3() {

    }
}

 

這樣就可以實現偽方法級的多線程,在日常的編碼中,多用內部類會使代碼邏輯更清晰,結構更合理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM