实际项目中Java多线程模型的总结整理

分享一下最近项目中用到的多线程模型。

需要实现:根据租户填写的表单,自动部署ES集群,提供ES服务。

基本思路:

就是将一个事务生命周期分成不同的阶段,每个阶段都是用线程去负责执行。

目前主要分为四个阶段:事件监听阶段,事件提交阶段,执行器阶段,状态校验阶段

流程图如下:

线程分类:

A、监听线程

B、工作线程

C、状态校验线程

D、执行器线程

原理图简单介绍:

1、AcceptorThread线程:监听操作对列表,将新产生的事件记录扔进事件分类器,并且同时往内存容器中添加一条记录。

2、事件分类器:根据事件的类型,创建不同的工作线程

3、工作线程:工作线程是具体干活的,如负责调用marathon的create接口,删除接口,停止接口等

4、执行器:

A、不断的监听执行容器,有任务的话,就去执行,如停止节点,启动节点,恢复节点等操作。

B、更新节点表的状态,以及 内存缓存容器中节点的状态

5、OptStateThread:监听内存缓存容器OptMap,如果有新的事件发生,根据类型产生不同的校验线程;

6、校验线程:具体负责校验的;根据校验的结果来更新集群的状态

总结:

A、体现了生产者,消费者思想

B、对事件进行了分割,各自线程只负责自己单独的部分。

C、对事务的生命周期,要学会进行合理的拆分

D、要横向思维,分阶段,分模块划分

代码不是很重要,主要是理解这种设计模式,设计思路;

其实,可以从Netty的多线程模型中吸取知识,从而应用到以后的项目中。

时间: 2024-10-05 05:50:21

实际项目中Java多线程模型的总结整理的相关文章

Java多线程模型

谈到Java多线程就涉及到多线程的模型及Java线程与底层操作系统之间的关系.正如我们熟知,现代机器可以分为硬件和软件两大块,如图2-5-1-1,硬件是基础,软件提供实现不同功能的手段.而且软件可以分为操作系统和应用程序,操作系统专注于对硬件的交互管理并提供一个运行环境给应用程序使用,应用程序则是能实现若干功能的并且运行在操作系统环境中的软件.同样,线程按照操作系统和应用程序两层次可以分为内核线程(Kernel Thread)和用户线程(User Thread). 图2-5-1-1 所谓内核线程

Java web项目中java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

原来是tomcat找不到MYSQL JAR包的问题.后来又把mysql-connector-java-5.1.7-bin.jar导入到tomcat的lib目录下面就ok了,嘿…… 在java项目中,只需要引入mysql-connector-java-5.1.7-bin.jar就可以运行java项目. 在web项目中,当Class.forName("om.mysql.jdbc.Driver");时myeclipse是不会去查找字符串,不会去查找驱动的.所以只需要把mysql-connec

Maven项目中java类报错-Cannot resolve symbol

电脑蓝屏了,强制重启之后再打开IDEA里面的项目,所有Java类文件都在报Cannot resolve symbo错误,可以确定所有依赖的包都有引用且jar包没有冲突. 经查询找到这个解决方法: 在IDEA中 点击 File   ->   Invalidate Caches/Restart,清理了缓存重启IDEA就解决了 原文地址:https://www.cnblogs.com/yw-ah/p/8508314.html

《深入理解java内存模型》学习整理1

1:在java中,所有实例域.静态域和数组元素存储在堆内存中,堆内存在线程之间共享. 2:局部变量.方法定义参数和异常处理器参数不会在线程之间共享 3:java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见.从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本.

项目开发中使用并发模型常见问题的整理与思考

需求: 数量不定,会定期更新数据,且数据量大的一堆数据,需要在短时间内调用某个接口获取到所有的数据,随后根据返回的json键值进行分类处理. 需求如上,初步分析,我们必然会用到多线程来做,即开一定数量的线程去调用接口获取数据,随后处理返回的json数据,这一套我们需要分开来做,调用接口获取数据我们可以看成是生产者,而处理返回的数据,将其分类就可以看作是消费者.那么,现在我们要来思考下采用这套模型可能会产生的问题.首先,如果生产者生产的数据的速度小于消费者消费的速度,那么此时,我们就需要挂起消费者

项目中java异常处理

一.java异常类介绍. Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类. 有一篇比较好的blog,http://blog.csdn.net/hguisu/article/details/6155636 介绍java异常. 二.异常处理方式. 在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常. 三.程序中使用. 2种处理方式 1.throw new 异常  在方法体上写throws

springmvc项目中java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListenerjava.lang.ClassNotFoundException: org.springframework.web

java多线程中注入Spring对象问题

web应用中java多线程并发处理业务时,容易抛出NullPointerException. 原因: 线程中的Spring Bean没有被注入.web容器在启动时,没有提前将线程中的bean注入,在线程启动之前,web容器是无法感知的. 解决方案: 方法一.在声明成员变量的时候,将其定义为static的.(据说不可行) 方法二.将线程设置为主程序的内部类. 在外部类中注入bean,这样在内部类线程中就可以“共享”这个对象. 方法三.定义一个工具类,使用静态工厂方法通过getBean获得bean对

JAVA多线程--线程的同步安全

每当我们在项目中使用多线程的时候,我们就不得不考虑线程的安全问题,而与线程安全直接挂钩的就是线程的同步问题.而在java的多线程中,用来保证多线程的同步安全性的主要有三种方法:同步代码块,同步方法和同步锁.下面就一起来看: 一.引言 最经典的线程问题:去银行存钱和取钱的问题,现在又甲乙两个人去同一个账户中取款,每人取出800,但是账户中一共有1000元,从逻辑上来讲,如果甲取走800,那么乙一定取不出来800: 1 package thread.threadInBank; 2 3 /** 4 *