《Java NIO系列教程》学习笔记
· 阅读需 4 分钟
Java NIO 由以下几个核心部分组成:
- Channels
- Buffers
- Selectors
Channel
FileChannel:从文件中读写数据DatagramChannel:能通过UDP读写网络中的数据SocketChannel:能通过TCP读写网络中的数据ServerSocketChannel:可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel
Java NIO 由以下几个核心部分组成:
FileChannel:从文件中读写数据DatagramChannel:能通过UDP读写网络中的数据SocketChannel:能通过TCP读写网络中的数据ServerSocketChannel:可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannelLockSupport可以控制线程的状态,从而达到线程在等待唤醒之间切换的目的,并且不用担心阻塞和唤醒操作的顺序,但要注意连续多次唤醒的效果和一次唤醒是一样的。
注意:unpark 函数可以先于 park 调用。
【LockSupport与的区别】
park和unpark都是调用native方法,由JVM实现:
想自己耍耍Kafka,简单装好后,运行个简单的demo,结果直接卡住不动了,但使用命令行发消息是正常的。我的Kafka版本为2.6,demo代码为:
package top.jlice;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.Properties;
public class MyProducer {
public static void main(String[] args) {
Properties properties = new Properties();
properties.put("bootstrap.servers", "localhost:9092");
properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
KafkaProducer<String, String> producer = new KafkaProducer<>(properties);
for (int i = 0; i < 10; i++) {
producer.send(new ProducerRecord<String, String>("test", "jlice.top-" + i));
}
producer.close();
}
}
在调试时,有时想要查看MyBatis生成的SQL语句,为此,可以在SpringBoot的配置文件中将mapper的日志级别设置为debug:
# Mybatis
logging.level.top.jlice.demo.mapper=debug
这样在控制台就会打印出MyBatis生成的SQL语句,不过,分为了Preparing、Parameters和Total三个部分。为了得到可以直接执行的SQL语句,首先可以通过Grep Console插件过滤出这部分的日志,