项目作者: 17661977890

项目描述 :
springboot 对多线程和ehcache缓存的支持
高级语言: Java
项目地址: git://github.com/17661977890/async.git
创建时间: 2019-07-02T09:11:06Z
项目社区:https://github.com/17661977890/async

开源协议:

下载


springboot 对多线程的支持

springboot 配置多线程需要两个注解


@EnableAsync
在配置类中通过加@EnableAsync开启对异步任务的支持

@Async
在需要执行的方法上加@Async表明该方法是个异步方法,如果加在类级别上,则表明类所有的方法都是异步方法

  • @Async所修饰的函数不要定义为static类型,这样异步调用不会生效

测试:

  • 执行测试方法,调用AsyncService的异步方法

countDownLatch的使用:

  • countdownlatch 包

  • 是一个非常实用的多线程控制工具类

  • CountDownLatch是基于AQS实现的一个并发工具类,允许一个线程或多个线程等待其它线程操作,初始化是传入总的计数器,
  • 内部都通过new Sync一个返回一个对象。当调用countDown()方法 就会吧计数器做递减,当计数器为0时,就会恢复等待的线程继续执行,计数到达零之前,await 方法会一直受阻塞。
  1. # 可以看看源码:
  2. # AbstractQueuedSynchronizer :AQS队列同步器
  3. # Sync 内部类(同步器),继承AQS
  4. private static final class Sync extends AbstractQueuedSynchronizer {
  5. private static final long serialVersionUID = 4982264981922014374L;
  6. Sync(int count) {
  7. setState(count);
  8. }
  9. int getCount() {
  10. return getState();
  11. }
  12. protected int tryAcquireShared(int acquires) {
  13. return (getState() == 0) ? 1 : -1;
  14. }
  15. protected boolean tryReleaseShared(int releases) {
  16. // 死循环,自旋
  17. for (;;) {
  18. int c = getState();
  19. if (c == 0)
  20. return false;
  21. int nextc = c-1;
  22. if (compareAndSetState(c, nextc))
  23. return nextc == 0;
  24. }
  25. }
  26. }
  27. private final Sync sync;
  28. public CountDownLatch(int count) {
  29. if (count < 0) throw new IllegalArgumentException("count < 0");
  30. this.sync = new Sync(count);
  31. }

springboot 对ehcache缓存的支持

  • 配置ehcache.xml 配置文件
  • 添加yml 配置
  • 在启动类前加上@EnableCaching注解
  • 实体类实现可序列化接口Serializable;由于需要实体类支持缓存中的磁盘存储,所以需要实体类实现可序列化接口
  • 编写业务代码,在方法或者类上使用 缓存注解 ,具体用法子那个百度
    @CachePut(value = “user”,key = “#user.id”)
    @Cacheable(value = “user”,key = “#root.args[0]”)
    @CacheEvict(value = “user”)