java多線程異步執行


 

 

import java.util.concurrent.Callable;  
import java.util.concurrent.ExecutionException;  
import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  
import java.util.concurrent.Future;  
  
public class TestMain {  
  
    public static void main(String[] args) {  
  
        //實現一個Callable接口  
        Callable<Netty> c = new Callable<Netty>() {  
            @Override  
            public Netty call() throws Exception {  
                  
                //這里是你的業務邏輯處理  
                  
                //讓當前線程阻塞5秒看下效果  
                System.out.println("---sleep開始---");  
                Thread.sleep(5000);  
                System.out.println("---sleep結束---");  
                return new Netty("張三");  
            }  
        };  
  
        System.out.println("---主線程不被阻塞,繼續往下走---");  
        
        /*Java通過Executors提供四種線程池,分別為:
        newCachedThreadPool創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。
        newFixedThreadPool 創建一個定長線程池,可控制線程最大並發數,超出的線程會在隊列中等待。
        newScheduledThreadPool 創建一個定長線程池,支持定時及周期性任務執行。
        newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。*/
        ExecutorService es = Executors.newCachedThreadPool();  
          
        //記得要用submit,執行Callable對象  
        Future<Netty> fn = es.submit(c);  
          
        //無限循環等待任務處理完畢  如果已經處理完畢 isDone返回true  
        while (!fn.isDone()) {  
            try {  
                //處理完畢后返回的結果  
                Netty nt = fn.get();  
                System.out.println("處理完畢后返回的結果:" + nt.name);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            } catch (ExecutionException e) {  
                e.printStackTrace();  
            }  
        }  
        
        if (fn.isDone()) {
            System.out.println("關閉");  
            es.shutdown();
        }
        System.out.println("全部運行結束");  
    }  
  
    static class Netty {  
        private Netty(String name) {  
            this.name = name;  
        }  
  
        private String name;  
    }  
    
}  

 


免責聲明!

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



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