JAva非同期実行ビジネスロジック
1516 ワード
JAva非同期実行ビジネスロジック
1、スレッドプールの作成:
JavaはExecutorsを通じて4種類のスレッドプールを提供します:a、newCachedThreadPoolは1つのキャッシュ可能なスレッドプールを作成して、もしスレッドプールの長さが処理の必要を超えるならば、柔軟に空きスレッドを回収することができて、回収可能でないならば、新しいスレッド.b、newFixedThreadPoolは、スレッドの最大同時数を制御し、超過したスレッドがキュー内で待機する定長スレッドプールを作成する.c、newScheduledThreadPoolは、タイミングおよび周期的なタスク実行をサポートする定長スレッドプールを作成します.d、newSingleThreadExecutorは、一意の作業スレッドのみでタスクを実行し、すべてのタスクが指定された順序(FIFO、LIFO、優先度)で実行されることを保証する単一スレッド化されたスレッドプールを作成します.ここでは単一スレッドプールを採用します.
非同期で実行されるビジネスは、理論的にはプライマリ・スレッドまたは他のスレッドと相互に影響しないビジネスであるべきである.ここでは、全国の省・市のデータ情報を異なるデータ・ソースで取得しただけです.
もう1つのスレッド:ここではsleepにすぎません.コンソールでは、プライマリ・スレッドの実行に影響を与えることはありません.例外が発生しても、プライマリ・スレッドは正常に実行され、返されます.
1、スレッドプールの作成:
JavaはExecutorsを通じて4種類のスレッドプールを提供します:a、newCachedThreadPoolは1つのキャッシュ可能なスレッドプールを作成して、もしスレッドプールの長さが処理の必要を超えるならば、柔軟に空きスレッドを回収することができて、回収可能でないならば、新しいスレッド.b、newFixedThreadPoolは、スレッドの最大同時数を制御し、超過したスレッドがキュー内で待機する定長スレッドプールを作成する.c、newScheduledThreadPoolは、タイミングおよび周期的なタスク実行をサポートする定長スレッドプールを作成します.d、newSingleThreadExecutorは、一意の作業スレッドのみでタスクを実行し、すべてのタスクが指定された順序(FIFO、LIFO、優先度)で実行されることを保証する単一スレッド化されたスレッドプールを作成します.ここでは単一スレッドプールを採用します.
非同期で実行されるビジネスは、理論的にはプライマリ・スレッドまたは他のスレッドと相互に影響しないビジネスであるべきである.ここでは、全国の省・市のデータ情報を異なるデータ・ソースで取得しただけです.
@Override
public List dataSource3() {
long startTime = System.currentTimeMillis(); //
//
ExecutorService executorService = Executors.newSingleThreadExecutor();
Task task = new Task();
executorService.submit(task);
executorService.shutdown();
List provinces = baseRegionAMapper.getProvince();
long endTime = System.currentTimeMillis(); //
log.info(" :" + (endTime - startTime) + "ms");
return provinces;
}
もう1つのスレッド:ここではsleepにすぎません.コンソールでは、プライマリ・スレッドの実行に影響を与えることはありません.例外が発生しても、プライマリ・スレッドは正常に実行され、返されます.
private class Task implements Runnable {
@Override
public void run() {
try {
Thread.sleep(6000);
baseRegionBMapper.getProvince();
//int i = 10/0
} catch (Exception e) {
e.printStackTrace();
}
}
}