上文我们验证了Netty服务端线程,这次我们验证客户端线程(当然,这需要与前文服务端代码配合测试).
EventLoopGroup group = new NioEventLoopGroup();
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(group)
.channel(NioSocketChannel.class)
.option(ChannelOption.SO_KEEPALIVE, true)
.option(ChannelOption.TCP_NODELAY, true)
.handler(new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel ch) {
ChannelPipeline channelPipeline = ch.pipeline();
channelPipeline.addLast(new StringDecoder());
channelPipeline.addLast(new StringEncoder());
channelPipeline.addLast(new ClientInHandler());//自定义输入Handler
});
bootstrap.connect(new InetSocketAddress("127.0.0.1", 8080));
输入Handler代码
@Slf4j
public class ClientInHandler extends SimpleChannelInboundHandler<String> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, String msg) {
System.out.println("ClientInHandler-channelRead0: " + Thread.currentThread().getName());
System.out.println("客户端接收到服务端数据: " + msg);
既然客户端还要接收服务端的数据,我们在HeadContext的channelRead方法也打印一行
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.out.println("HeadContext-channelRead: " + Thread.currentThread().getName());
ctx.fireChannelRead(msg);
接下来我们首先执行服务端代码(在前文中,自己查找),然后再执行客户端代码,我们发现

两个Handler使用的是同一个线程.
稍微改动下代码

再次启动服务,打印内容如下

两个不同的线程.
也就是说,当用户手动指定Handler执行的线程时,那么就是指定的线程执行Handler的代码,否则就是默认的IO线程执行.
//获得当前发布的版本
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//耗时的操作--获取某个应用在AppStore上的信息,更改id就行
__weak Log
asp.net 存储过程返回值 存储过程返回表数据
1、返回一个数值 declare @count int exec @count = testReturn \'111\',\'222\' select @count @count就是返回的数值是int类型
2、返回一个数据表
首先要新建一个数据表
CREATE TABLE test (
TMP_ORDER_ID varchar(20)
然后将返回的数据插入到表中
insert
java 耗时计算 java耗时操作异步
JDK 8 是一次重大的版本升级,新增了非常多的特性,其中之一便是 CompletableFuture。自此从 JDK 层面真正意义上的支持了基于事件的异步编程范式,弥补了 Future 的缺陷。
在我们的日常优化中,最常用手段便是多线程并行执行。这时候就会涉及到 CompletableFuture 的使用。
作者:京东科技 张天赐前言JDK 8 是一次重
nexus docker部署 docker启动nexus
备注:首先在linux环境安装Java环境和Docker,私服需要的服务器性能和硬盘存储要高一点,内存不足可能到时启动失败,这里以4核8GLinux服务器做演示一:基于Docker安装nexus31.下载nexus3镜像
docker pull sonatype/nexus3
2.启动nexus3容器,将容器内部/var/nexus-data挂载到宿主机/usr/local/boris/nexus