同步操作将从 电霸儿/grain 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
1、如果你想使用distributedlock(多对多关系的分布式锁),那需要选择他依赖的六个组件和三个外部jar包。
2、如果你想使用rpc(远程对象访问),那需要选择他依赖的五个组件和三个外部jar包。
3、如果你想使用threadmsg(系统多线程模型,线程消息通讯),那需要选择他依赖的三个组件,不需要任何外部jar包。
4、如果你想使用threadkeylock(支持锁类型单键值与双键值的多线程锁),那仅仅只需要他依赖的一个组件和他本身。
https://github.com/dianbaer/grain
如果想打印日志,需要实现此日志接口并将实现的类的对象传递到各个组件初始化函数中。
可进行消息的注册、监听、派发等功能。(当前线程)
grain最核心的组件,支撑起上层很多组件包含threadmsg(线程消息通讯)、rpc(远程对象访问)、distributedlock(多对多关系的分布式锁)。
grain-thread支持创建多线程池,业务轮询精准注入指定线程ID,任意消息(例如:msg、tcp、websocket等)精准注入指定线程ID。
系统多线程之间的通讯,业务线程跳转都依赖此组件。
通过grain-tcp可创建TCP客户端与服务器进行通讯,客户端支持断线重连。通讯消息序列化与反序列化,粘包问题等都已内部解决。
例子:grain-tcp-clienttest、grain-tcp-servertest直接运行main函数即可
通过grain-rpc可以创建RPC客户端与服务器进行远程对象访问。多线程阻塞,唤醒等复杂的多线程业务都已内部解决。
简单例子:
1、创建消息包
RPCTestC.Builder builder = RPCTestC.newBuilder();
builder.setName("RPC你好啊");
TcpPacket pt = new TcpPacket(TestTCode.TEST_RPC_C, builder.build());
2、远程调用
TcpPacket ptReturn = WaitLockManager.lock(session, pt);
例子:grain-rpc-clienttest、grain-rpc-servertest直接运行main函数即可
去中心化思路,通过grain-distributedlock可以创建分布式锁服务器与锁客户端。
grain-distributedlock不同类型互不影响,相同类型不同键值互不影响。仅仅当类型与键值都相等时会进行分布式阻塞。
锁客户端与锁服务器的双向线程阻塞,服务器匹配、类型键值与线程ID的匹配都已内部解决。
简单例子:
// 获取锁
int lockId = DistributedLockClient.getLock("111", "user");
if (lockId == 0) {
return;
}
/*********** 执行分布式锁业务逻辑 *********/
System.out.println("分布式锁id为:" + lockId);
/*********** 执行分布式锁业务逻辑 *********/
// 释放锁
DistributedLockClient.unLock("111", "user", lockId);
例子:grain-distributedlock-clienttest、grain-distributedlock-servertest直接运行main函数即可
grain-config可以进行配置的加载,管理等工作。支持模板类文件与json文件。
在多线程业务中,支持锁类型的单键值与双键值,并且支持锁函数
简单例子1(锁函数):当类型为TEST1,键值为111同时调用函数时,会进行锁定。
public String lockFunction(Object... params) {}
String str = (String) KeyLockManager.lockMethod("111", TEST1, (params) -> lockFunction(params), new Object[] { "222", 111 });
简单例子2(锁函数):当类型为TEST1,键值为111或222同时调用函数时,会进行锁定。
String str = (String) KeyLockManager.lockMethod("111", "222", TEST1, (params) -> lockFunction(params), new Object[] { "222", 111 });
更简洁的操作redis、mongodb、mariadb。
将grain-websocket包引入web工程,可以创建websocket服务器。(业务基于容器线程,例如tomcat线程)
例子:grain-websocket-test
将grain-threadwebsocket包引入web工程,可以创建websocket服务器。(业务分发至系统多线程模型grain-thread,可以精准指派某业务归属线程ID)
例子:grain-threadwebsocket-test
基于servlet的http服务器,简化http请求
例子:grain-httpserver-test
ant
java8
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。