七万号·数据平台实战手记

Back

VirtualThread Thread.yield() 从jdk测试里摘抄#

ScopedValue,StructuredTaskScope#

JEP 429: Scoped Values (Incubator) 代码用的java版本是 openjdk 22-internal ,SOURCE=”.:git:ad34be1f329e”

isBound, get#


// get
ScopedValue<String> name = ScopedValue.newInstance();
String result = ScopedValue.getWhere(name, "duke", ()->{
    // 在这个scope里是inbound的
    System.out.println(name.isBound());
    // 所以这个scope里才能get到值
    return name.get();
});
System.out.println(result);
System.out.println(name.isBound());
java

几个开启scope的方法runWhere,callWhere,getWhere#

scope嵌套#

ScopedValue<String> v1 = ScopedValue.newInstance();
ScopedValue.runWhere(v1,"v1 leve1",()->{
    assert v1.isBound();
    assert "v1 leve1" == v1.get();
    ScopedValue.runWhere(v1,"v1 leve2",()->{
        assert v1.isBound();
        assert "v1 leve2" == v1.get();
    });
    assert v1.isBound();
    assert "v1 leve1" == v1.get();
});
java

多值#

ScopedValue<String> name = ScopedValue.newInstance();
ScopedValue<Integer> age = ScopedValue.newInstance();
ScopedValue.where(name,"my name")
        .where(age,22)
        .run(()->{
            assert name.isBound();
            assert age.isBound();
            System.out.println(name.get());
            System.out.println(age.get());

        });
java

StructuredTaskScope 的PreviewFeature的版本,与19release的版本略有不同#

对了 如果一些没有relase的版本的代码片段在IDEA上无法运行,就直接java XXX 吧,java已经可以直接执行java文件了, 加上--enable-preview --source 22即可

fork with virtual thread#

ShutdownOnSuccess#

自定义scope handle#

使用自定义的scope#

jdbc#

表结构、列信息获取#

查询#

事务#

spi demo#

加载方式#

关于jdk那些不得不说的故事
https://realcpf.tech/blog/the-jdk
Author 刘佳成
Published at 2024年1月3日