一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解spring多線程與定時任務

詳解spring多線程與定時任務

2020-09-09 13:16全力以赴001 Java教程

本篇文章主要介紹了spring多線程與定時任務,詳細的介紹了spring多線程任務和spring定時任務,有興趣的可以了解一下。

本篇主要描述一下spring多線程的使用與定時任務的使用.

1.spring多線程任務的使用

spring通過任務執行器TaskExecutor來實現多線程與并發編程。通常使用ThreadPoolTaskExecutor來實現一個基于線程池的TaskExecutor.

首先你要實現AsyncConfigurer 這個接口,目的是開啟一個線程池

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.foreveross.service.weixin.test.thread;
 
import java.util.concurrent.Executor;
 
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
/**
 * 注入一個線程池
 * @author mingge
 *
 */
 
@Configuration
@ComponentScan("com.foreveross.service.weixin.test.thread")
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {
 
  @Override
  public Executor getAsyncExecutor() {
    ThreadPoolTaskExecutor taskExecutor=new ThreadPoolTaskExecutor();
    taskExecutor.setCorePoolSize(5);
    taskExecutor.setMaxPoolSize(20);
    taskExecutor.setQueueCapacity(25);
    taskExecutor.initialize();
    return taskExecutor;
  }
 
  @Override
  public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
    return null;
  }
 
  
}

然后注入一個類,實現你的業務,并在你的Bean的方法中使用@Async注解來聲明其是一個異步任務

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.foreveross.service.weixin.test.thread;
 
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
 
/**
 * 線程池任務
 * @author mingge
 *
 */
@Service
public class TaskService {
 
  @Async
  public void executeAsyncTask(int i){
    System.out.println("執行異步任務:"+i);
  }
  
  @Async
  public void executeAsyncTask1(int i){
    System.out.println("執行異步任務1:"+(i+i));
  }
}

最后通過測試,可以看到你的實現是異步執行了.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.foreveross.service.weixin.test.thread;
 
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
 
/**
 *
 * @author mingge
 *
 */
public class Test {
 
  public static void main(String[] args) {
    AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(TaskExecutorConfig.class);
    TaskService taskService=context.getBean(TaskService.class);
    for(int i=0;i<20;i++){
      taskService.executeAsyncTask(i);
      taskService.executeAsyncTask1(i);
    }
    //最后可以根據結果可以看出結果是并發執行而不是順序執行的呢
    context.close();
  }
}

2.spring定時任務的使用

在java原生態中,我們使用timer就可以了,這里小編說一些在Spring中的定時任務的使用

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.foreveross.service.weixin.test.thread;
 
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
 
@Configuration
@ComponentScan("com.foreveross.service.weixin.test.thread")
@EnableScheduling//開啟對定時器的支持
public class TaskSchedulerConfig {
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.foreveross.service.weixin.test.thread;
 
import java.util.Date;
 
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
 
@Service
public class TimerTaskJob {
 
  @Scheduled(fixedRate=2000)
  public void test(){
    System.out.println("我是定時任務:"+new Date().getSeconds());
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
package com.foreveross.service.weixin.test.thread;
 
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
public class TestTimer {
  public static void main(String[] args) {
    AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(TaskSchedulerConfig.class);
    
    //context.close();
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/huzi007/p/6219587.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 被老外玩爽的中国美女视频 | 日韩在线视精品在亚洲 | 日日综合 | 青草视频在线观看免费资源 | 涩涩屋视频在线观看 | 爱操综合网 | 欧美综合亚洲图片综合区 | bt天堂在线最新版在线 | 激情三级hd中文字幕 | 国产乱码免费卡1卡二卡3卡四 | 2020韩国r级理论片在线观看 | 奇米影视888四色首页 | 被夫上司侵犯了中文字幕 | 男女操bb| 草草国产成人免费视频 | 午夜一区二区免费视频 | 7777奇米 | 国产亚洲精品看片在线观看 | 免费老外的毛片清高 | 五月天久久久 | 亚欧洲乱码专区视频 | 色老板在线播放 | 亚洲色图中文字幕 | 精品无人乱码一区二区三区 | 成人免费毛片一区二区三区 | 久久婷婷五月免费综合色啪 | 白鹿扒开内裤露出尿孔 | 久久黄色免费 | 欧美免赞性视频 | 精品国产91高清在线观看 | 好奇害死猫在线观看 | 欧美成人第一页 | 免费在线观看日本 | 国内亚州视频在线观看 | 国产成人一区二区三区影院免费 | 明星裸乳照无奶罩 | 欧美同性videos| 第一次做m被调教经历 | 国产高清好大好夹受不了了 | 亚洲天堂免费看 | chinese老太grandma|