跳到主要内容

LockSupport源码分析

· 阅读需 9 分钟

LockSupport简介

LockSupport可以控制线程的状态,从而达到线程在等待唤醒之间切换的目的,并且不用担心阻塞和唤醒操作的顺序,但要注意连续多次唤醒的效果和一次唤醒是一样的。

注意:unpark 函数可以先于 park 调用。

【LockSupport与的区别】

  • LockSupport.park和unpark不需要在同步代码块中,wait和notify是需要的。
  • LockSupport的pork和unpark是针对线程的,而wait和notify是可以是任意对象。
  • LockSupport的unpark可以让指定线程被唤醒,但是notify是随机唤醒一个,notifyAll是全部唤醒,不够灵活。

park和unpark都是调用native方法,由JVM实现:

Kafka 2.6卡住,Topic not present in metadata

· 阅读需 3 分钟

想自己耍耍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();
}
}

用Shell脚本做个GitHub图床工具

· 阅读需 4 分钟

前言

因为我的阿里云学生机快到期了,所以思来想去决定还是把博客迁移到静态博客,不折腾Typecho了。不过,使用静态博客有个比较麻烦的事就是图片上传。众所周知,在Markdown里插入图片就需要图片链接,以前折腾了各种对象存储,现在觉得用GitHub做图床就挺不错的,速度其实还是挺快的,还有jsDelivr的CDN加速。

步骤

尽管有很多图床工具可以方便地进行图片上传,例如PicGo、uPic等。不过,我觉得对于这个简单的事情,没必要这么麻烦,用Shell脚本就行。于是乎,就简单用Shell脚本做了个GitHub图床工具。其实图床工具要做的事比较简单,主要流程如下:

图床流程

在MyBatis中调试查看生成的SQL语句

· 阅读需 2 分钟

在调试时,有时想要查看MyBatis生成的SQL语句,为此,可以在SpringBoot的配置文件中将mapper的日志级别设置为debug:

# Mybatis
logging.level.top.jlice.demo.mapper=debug

这样在控制台就会打印出MyBatis生成的SQL语句,不过,分为了Preparing、Parameters和Total三个部分。为了得到可以直接执行的SQL语句,首先可以通过Grep Console插件过滤出这部分的日志,

ScreenShot-2020-12-05T12:54:25

API查询利器Dash下载离线文档Docsets过慢的解决方法

· 阅读需 3 分钟

屏幕快照 2020-06-15 09.57.15.png

诚然,MacOS下的Dash是API查询利器,但有个很大的问题就是下载离线文档Docsets实在是太慢了,还动辄下载失败。为此,可以获取Docsets的下载地址,然后自行使用支持断点续传的多线程下载工具(如axel)下载,然后导入到Dash即可。

Dash在下载Docsets时,会先查询其下载地址。例如,对于Python 3,会请求 http://kapeli.com/feeds/Python_3.xml ,结果如下(为了排版,省略部分内容):