diff --git a/src/main/java/org/redkale/boot/Application.java b/src/main/java/org/redkale/boot/Application.java index dcdb1cad3..8eaae689c 100644 --- a/src/main/java/org/redkale/boot/Application.java +++ b/src/main/java/org/redkale/boot/Application.java @@ -955,7 +955,7 @@ public final class Application { } }); } - + ByteArrayOutputStream out = new ByteArrayOutputStream(); final PrintStream ps = new PrintStream(out); properties.forEach((x, y) -> ps.println(x + "=" + y)); @@ -1135,7 +1135,7 @@ public final class Application { if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) { return null; } - HttpSimpleClient httpClient = HttpSimpleClient.create(clientAsyncGroup); + HttpSimpleClient httpClient = HttpSimpleClient.create(workExecutor, clientAsyncGroup); field.set(srcObj, httpClient); rf.inject(resourceName, httpClient, null); // 给其可能包含@Resource的字段赋值; rf.register(resourceName, HttpSimpleClient.class, httpClient); diff --git a/src/main/java/org/redkale/net/http/HttpSimpleClient.java b/src/main/java/org/redkale/net/http/HttpSimpleClient.java index a6c9ce558..66552d99e 100644 --- a/src/main/java/org/redkale/net/http/HttpSimpleClient.java +++ b/src/main/java/org/redkale/net/http/HttpSimpleClient.java @@ -42,16 +42,23 @@ public class HttpSimpleClient { protected final AsyncGroup asyncGroup; + protected ExecutorService workExecutor; + protected int readTimeoutSeconds = 6; protected int writeTimeoutSeconds = 6; - protected HttpSimpleClient(AsyncGroup asyncGroup) { + protected HttpSimpleClient(ExecutorService workExecutor, AsyncGroup asyncGroup) { + this.workExecutor = workExecutor; this.asyncGroup = asyncGroup; } + public static HttpSimpleClient create(ExecutorService workExecutor, AsyncGroup asyncGroup) { + return new HttpSimpleClient(workExecutor, asyncGroup); + } + public static HttpSimpleClient create(AsyncGroup asyncGroup) { - return new HttpSimpleClient(asyncGroup); + return create(null, asyncGroup); } public HttpSimpleClient readTimeoutSeconds(int readTimeoutSeconds) { @@ -299,7 +306,7 @@ public class HttpSimpleClient { } - protected static class ClientReadCompletionHandler implements CompletionHandler { + protected class ClientReadCompletionHandler implements CompletionHandler { protected static final int READ_STATE_ROUTE = 1; @@ -395,23 +402,33 @@ public class HttpSimpleClient { HttpResult result = this.responseResult; try { result.result(c.convertFrom(valueType, this.responseResult.getResult())); - if (workThread == null) { - Utility.execute(() -> { + if (workThread != null) { + workThread.runWork(() -> { + Traces.currentTraceid(traceid); + future.complete((HttpResult) this.responseResult); + }); + } else if (workExecutor != null) { + workExecutor.execute(() -> { Traces.currentTraceid(traceid); future.complete((HttpResult) this.responseResult); }); } else { - workThread.runWork(() -> { + Utility.execute(() -> { Traces.currentTraceid(traceid); future.complete((HttpResult) this.responseResult); }); } } catch (Exception e) { - if (workThread == null) { + if (workThread != null) { Utility.execute(() -> { Traces.currentTraceid(traceid); future.completeExceptionally(e); }); + } else if (workExecutor == null) { + workExecutor.execute(() -> { + Traces.currentTraceid(traceid); + future.completeExceptionally(e); + }); } else { workThread.runWork(() -> { Traces.currentTraceid(traceid); @@ -420,13 +437,18 @@ public class HttpSimpleClient { } } } else { - if (workThread == null) { - Utility.execute(() -> { + if (workThread != null) { + workThread.runWork(() -> { + Traces.currentTraceid(traceid); + future.complete((HttpResult) this.responseResult); + }); + } else if (workExecutor != null) { + workExecutor.execute(() -> { Traces.currentTraceid(traceid); future.complete((HttpResult) this.responseResult); }); } else { - workThread.runWork(() -> { + Utility.execute(() -> { Traces.currentTraceid(traceid); future.complete((HttpResult) this.responseResult); }); diff --git a/src/main/java/org/redkale/source/AbstractCacheSource.java b/src/main/java/org/redkale/source/AbstractCacheSource.java index f410bb239..2e50466c3 100644 --- a/src/main/java/org/redkale/source/AbstractCacheSource.java +++ b/src/main/java/org/redkale/source/AbstractCacheSource.java @@ -2,6 +2,8 @@ */ package org.redkale.source; +import java.io.File; +import java.nio.file.Files; import java.util.*; import org.redkale.annotation.AutoLoad; import org.redkale.annotation.ResourceListener; @@ -51,6 +53,16 @@ public abstract class AbstractCacheSource extends AbstractService implements Cac //@since 2.7.0 public static final String CACHE_SOURCE_PIPELINES = "pipelines"; + public static void main(String[] args) throws Throwable { + File file = new File("C:\\Users\\zhangjx\\Desktop\\AnonymousVirtualPoolFunction.class"); + + System.out.println(Utility.binToHexString(Files.readAllBytes(file.toPath()))); + + file = new File("C:\\Users\\zhangjx\\Desktop\\AnonymousVirtualExecutor.class"); + + System.out.println(Utility.binToHexString(Files.readAllBytes(file.toPath()))); + } + @ResourceListener public abstract void onResourceChange(ResourceEvent[] events); diff --git a/src/main/java/org/redkale/util/AnonymousVirtualExecutor.java b/src/main/java/org/redkale/util/AnonymousVirtualExecutor.java index d1d14781b..19de0d67a 100644 --- a/src/main/java/org/redkale/util/AnonymousVirtualExecutor.java +++ b/src/main/java/org/redkale/util/AnonymousVirtualExecutor.java @@ -3,25 +3,19 @@ // */ //package org.redkale.util; // -//import java.util.concurrent.*; -//import java.util.function.Function; +//import java.util.concurrent.Executor; // ///** -// * 虚拟线程池 -// * +// * 虚拟线程运行 +// * // * @author zhangjx // * @since 2.8.0 // */ -//public class AnonymousVirtualExecutor implements Function { +//public class AnonymousVirtualExecutor implements Executor { // // @Override -// public ExecutorService apply(String threadNameFormat) { -// final ThreadFactory factory = Thread.ofVirtual().factory(); -// final String threadName = String.format(threadNameFormat, "Virtual"); -// return Executors.newThreadPerTaskExecutor(r -> { -// Thread t = factory.newThread(r); -// t.setName(threadName); -// return t; -// }); +// public void execute(Runnable t) { +// Thread.ofVirtual().name("Redkale-VirtualThread").start(t); // } +// //} diff --git a/src/main/java/org/redkale/util/AnonymousVirtualPoolFunction.java b/src/main/java/org/redkale/util/AnonymousVirtualPoolFunction.java new file mode 100644 index 000000000..46c5ac8fe --- /dev/null +++ b/src/main/java/org/redkale/util/AnonymousVirtualPoolFunction.java @@ -0,0 +1,27 @@ +///* +// * +// */ +//package org.redkale.util; +// +//import java.util.concurrent.*; +//import java.util.function.Function; +// +///** +// * 虚拟线程池 +// * +// * @author zhangjx +// * @since 2.8.0 +// */ +//public class AnonymousVirtualPoolFunction implements Function { +// +// @Override +// public ExecutorService apply(String threadNameFormat) { +// final ThreadFactory factory = Thread.ofVirtual().factory(); +// final String threadName = String.format(threadNameFormat, "Virtual"); +// return Executors.newThreadPerTaskExecutor(r -> { +// Thread t = factory.newThread(r); +// t.setName(threadName); +// return t; +// }); +// } +//} diff --git a/src/main/java/org/redkale/util/AnonymousVirtualRunner.java b/src/main/java/org/redkale/util/AnonymousVirtualRunner.java deleted file mode 100644 index 8e8c211b6..000000000 --- a/src/main/java/org/redkale/util/AnonymousVirtualRunner.java +++ /dev/null @@ -1,21 +0,0 @@ -///* -// * -// */ -//package org.redkale.util; -// -//import java.util.function.Consumer; -// -///** -// * 虚拟线程运行 -// * -// * @author zhangjx -// * @since 2.8.0 -// */ -//public class AnonymousVirtualRunner implements Consumer { -// -// @Override -// public void accept(Runnable t) { -// Thread.startVirtualThread(t); -// } -// -//} diff --git a/src/main/java/org/redkale/util/Utility.java b/src/main/java/org/redkale/util/Utility.java index 48686bbc1..21c078940 100644 --- a/src/main/java/org/redkale/util/Utility.java +++ b/src/main/java/org/redkale/util/Utility.java @@ -71,20 +71,20 @@ public final class Utility { JAVA_RECORD_CLASS = clz; } - //org.redkale.util.AnonymousVirtualExecutor - private static final String functionVirtualExecutorBinary = "cafebabe0000004100610a000200030700040c000500060100106a6176612f6c616e672f4f626a6563740100063c696e69743e0100032829560a0008000907000a0c000b000c0100106a6176612f6c616e672f5468726561640100096f665669727475616c01002628294c6a6176612f6c616e672f546872656164244275696c646572244f665669727475616c3b0b000e000f0700100c001100120100226a6176612f6c616e672f546872656164244275696c646572244f665669727475616c010007666163746f727901002628294c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b0800140100075669727475616c0a001600170700180c0019001a0100106a6176612f6c616e672f537472696e67010006666f726d6174010039284c6a6176612f6c616e672f537472696e673b5b4c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f537472696e673b120000001c0c001d001e0100096e657754687265616401005c284c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b4c6a6176612f6c616e672f537472696e673b294c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b0a002000210700220c0023002401001e6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72730100186e65775468726561645065725461736b4578656375746f7201004c284c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b294c6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72536572766963653b0a002600270700280c0029002a0100296f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c4578656375746f720100056170706c7901003a284c6a6176612f6c616e672f537472696e673b294c6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72536572766963653b0b002c002d07002e0c001d002f0100226a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f7279010028284c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b0a000800310c003200330100077365744e616d65010015284c6a6176612f6c616e672f537472696e673b295607003501001b6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c650100047468697301002b4c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c4578656375746f723b0100107468726561644e616d65466f726d61740100124c6a6176612f6c616e672f537472696e673b0100244c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b01000a7468726561644e616d650100104d6574686f64506172616d6574657273010026284c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b01000e6c616d626461246170706c79243001005e284c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b010001720100144c6a6176612f6c616e672f52756e6e61626c653b010001740100124c6a6176612f6c616e672f5468726561643b0100095369676e61747572650100694c6a6176612f6c616e672f4f626a6563743b4c6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e3c4c6a6176612f6c616e672f537472696e673b4c6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72536572766963653b3e3b01000a536f7572636546696c6501001d416e6f6e796d6f75735669727475616c4578656375746f722e6a617661010010426f6f7473747261704d6574686f647310002f0f06004e0a0026004f0c004100420f0600510a005200530700540c005500560100226a6176612f6c616e672f696e766f6b652f4c616d6264614d657461666163746f727901000b6d657461666163746f72790100cc284c6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c6573244c6f6f6b75703b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b4c6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c653b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b294c6a6176612f6c616e672f696e766f6b652f43616c6c536974653b01000c496e6e6572436c61737365730700590100186a6176612f6c616e672f546872656164244275696c6465720100074275696c6465720100094f665669727475616c07005d0100256a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c6573244c6f6f6b757007005f01001e6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c65730100064c6f6f6b75700021002600020001003400000004000100050006000100360000002f00010001000000052ab70001b10000000200370000000600010000000d00380000000c0001000000050039003a000000010029002a00020036000000720005000400000022b80007b9000d01004d2b04bd00025903121353b800154e2c2dba001b0000b8001fb00000000200370000000e000300000011000900120017001300380000002a0004000000220039003a000000000022003b003c0001000900190011003d00020017000b003e003c0003003f0000000501003b0000104100290040000200360000003300020002000000092a2bc00016b60025b00000000200370000000600010000000d00380000000c0001000000090039003a0000003f0000000501003b1000100a00410042000100360000005f000200040000000f2a2cb9002b02004e2d2bb600302db00000000200370000000e00030000001400080015000d001600380000002a00040000000f0011003d00000000000f003e003c00010000000f0043004400020008000700450046000300040047000000020048004900000002004a004b0000000c000100500003004c004d004c00570000001a000300580008005a0609000e0058005b0609005c005e00600019"; - - private static final Function virtualExecutorFunction; - //org.redkale.util.AnonymousThreadLocal private static final String functionThreadLocalBinary = "cafebabe0000004100480a000200030700040c000500060100156a6176612f6c616e672f5468726561644c6f63616c0100063c696e69743e010003282956090008000907000a0c000b000c0100256f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735468726561644c6f63616c010008737570706c69657201001d4c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723b0a0008000e0c0005000f010020284c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723b29560b001100120700130c0014001501001b6a6176612f7574696c2f66756e6374696f6e2f537570706c69657201000367657401001428294c6a6176612f6c616e672f4f626a6563743b0a001700180700190c001a001b0100106a6176612f6c616e672f54687265616401000d63757272656e7454687265616401001428294c6a6176612f6c616e672f5468726561643b0a0017001d0c001e001f01000969735669727475616c01000328295a0a000200210c00220023010003736574010015284c6a6176612f6c616e672f4f626a6563743b29560a000800250c0026001501000c696e697469616c56616c75650a000200120a000800290c002a002b0100056170706c79010036284c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723b294c6a6176612f6c616e672f5468726561644c6f63616c3b07002d01001b6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e0100095369676e61747572650100224c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723c54543b3e3b010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c65010004746869730100274c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735468726561644c6f63616c3b0100164c6f63616c5661726961626c65547970655461626c6501002c4c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735468726561644c6f63616c3c54543b3e3b0100104d6574686f64506172616d6574657273010025284c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723c54543b3e3b2956010040284c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723c54543b3e3b294c6a6176612f6c616e672f5468726561644c6f63616c3c54543b3e3b010005282954543b01000576616c75650100124c6a6176612f6c616e672f4f626a6563743b010001740100124c6a6176612f6c616e672f5468726561643b01000354543b01000d537461636b4d61705461626c650100062854543b29560700430100106a6176612f6c616e672f4f626a656374010026284c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b01008f3c543a4c6a6176612f6c616e672f4f626a6563743b3e4c6a6176612f6c616e672f5468726561644c6f63616c3c54543b3e3b4c6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e3c4c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723c54543b3e3b4c6a6176612f6c616e672f5468726561644c6f63616c3c54543b3e3b3e3b01000a536f7572636546696c65010019416e6f6e796d6f75735468726561644c6f63616c2e6a6176610021000800020001002c00010012000b000c0001002e00000002002f000600010005000f0003003000000062000200020000000a2ab700012a2bb50007b10000000300310000000e000300000016000400170009001800320000001600020000000a0033003400000000000a000b000c000100350000001600020000000a0033003600000000000a000b002f000100370000000501000b0000002e0000000200380001002a002b00030030000000590003000200000009bb0008592bb7000db00000000300310000000600010000001b00320000001600020000000900330034000000000009000b000c000100350000001600020000000900330036000000000009000b002f000100370000000501000b0000002e0000000200390004002600150002003000000046000100010000000a2ab40007b900100100b00000000300310000000600010000002000320000000c00010000000a00330034000000350000000c00010000000a003300360000002e00000002003a00010022002300030030000000850002000300000011b800164d2cb6001c9a00082a2bb70020b10000000400310000001200040000002500040026000b00270010002900320000002000030000001100330034000000000011003b003c00010004000d003d003e000200350000001600020000001100330036000000000011003b003f00010040000000080001fc001007001700370000000501003b0000002e00000002004100010014001500020030000000730001000200000017b800164c2bb6001c99000a2ab60024a700072ab70027b00000000400310000000a00020000002d0004002e00320000001600020000001700330034000000040013003d003e000100350000000c00010000001700330036000000400000000c0002fc001207001743070042002e00000002003a1041002a0044000200300000004500020002000000092a2bc00011b60028b00000000300310000000600010000001200320000000c00010000000900330034000000350000000c00010000000900330036000000370000000501000b10000002002e0000000200450046000000020047"; private static final Function virtualThreadLocalFunction; - //org.redkale.util.AnonymousVirtualRunner - private static final String consumerVirtualRunnerBinary = "cafebabe0000004000260a000200030700040c000500060100106a6176612f6c616e672f4f626a6563740100063c696e69743e0100032829560a0008000907000a0c000b000c0100106a6176612f6c616e672f54687265616401001273746172745669727475616c546872656164010028284c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b07000e0100126a6176612f6c616e672f52756e6e61626c650a001000110700120c001300140100276f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c52756e6e6572010006616363657074010017284c6a6176612f6c616e672f52756e6e61626c653b295607001601001b6a6176612f7574696c2f66756e6374696f6e2f436f6e73756d6572010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c65010004746869730100294c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c52756e6e65723b010001740100144c6a6176612f6c616e672f52756e6e61626c653b0100104d6574686f64506172616d65746572730100236f72672e6e65746265616e732e536f757263654c6576656c416e6e6f746174696f6e730100144c6a6176612f6c616e672f4f766572726964653b010015284c6a6176612f6c616e672f4f626a6563743b29560100095369676e61747572650100454c6a6176612f6c616e672f4f626a6563743b4c6a6176612f7574696c2f66756e6374696f6e2f436f6e73756d65723c4c6a6176612f6c616e672f52756e6e61626c653b3e3b01000a536f7572636546696c6501001b416e6f6e796d6f75735669727475616c52756e6e65722e6a6176610021001000020001001500000003000100050006000100170000002f00010001000000052ab70001b10000000200180000000600010000000e00190000000c000100000005001a001b0000000100130014000300170000003e00010002000000062bb8000757b10000000200180000000a00020000001200050013001900000016000200000006001a001b000000000006001c001d0001001e0000000501001c0000001f00000006000100200000104100130021000300170000003300020002000000092a2bc0000db6000fb10000000200180000000600010000000e00190000000c000100000009001a001b0000001e0000000501001c1000001f00000006000100200000000200220000000200230024000000020025"; + //org.redkale.util.AnonymousVirtualPoolFunction + private static final String functionVirtualPoolBinary = "cafebabe0000004100610a000200030700040c000500060100106a6176612f6c616e672f4f626a6563740100063c696e69743e0100032829560a0008000907000a0c000b000c0100106a6176612f6c616e672f5468726561640100096f665669727475616c01002628294c6a6176612f6c616e672f546872656164244275696c646572244f665669727475616c3b0b000e000f0700100c001100120100226a6176612f6c616e672f546872656164244275696c646572244f665669727475616c010007666163746f727901002628294c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b0800140100075669727475616c0a001600170700180c0019001a0100106a6176612f6c616e672f537472696e67010006666f726d6174010039284c6a6176612f6c616e672f537472696e673b5b4c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f537472696e673b120000001c0c001d001e0100096e657754687265616401005c284c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b4c6a6176612f6c616e672f537472696e673b294c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b0a002000210700220c0023002401001e6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72730100186e65775468726561645065725461736b4578656375746f7201004c284c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b294c6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72536572766963653b0a002600270700280c0029002a01002d6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c506f6f6c46756e6374696f6e0100056170706c7901003a284c6a6176612f6c616e672f537472696e673b294c6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72536572766963653b0b002c002d07002e0c001d002f0100226a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f7279010028284c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b0a000800310c003200330100077365744e616d65010015284c6a6176612f6c616e672f537472696e673b295607003501001b6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c650100047468697301002f4c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c506f6f6c46756e6374696f6e3b0100107468726561644e616d65466f726d61740100124c6a6176612f6c616e672f537472696e673b0100244c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b01000a7468726561644e616d650100104d6574686f64506172616d6574657273010026284c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b01000e6c616d626461246170706c79243001005e284c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b010001720100144c6a6176612f6c616e672f52756e6e61626c653b010001740100124c6a6176612f6c616e672f5468726561643b0100095369676e61747572650100694c6a6176612f6c616e672f4f626a6563743b4c6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e3c4c6a6176612f6c616e672f537472696e673b4c6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72536572766963653b3e3b01000a536f7572636546696c65010021416e6f6e796d6f75735669727475616c506f6f6c46756e6374696f6e2e6a617661010010426f6f7473747261704d6574686f647310002f0f06004e0a0026004f0c004100420f0600510a005200530700540c005500560100226a6176612f6c616e672f696e766f6b652f4c616d6264614d657461666163746f727901000b6d657461666163746f72790100cc284c6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c6573244c6f6f6b75703b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b4c6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c653b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b294c6a6176612f6c616e672f696e766f6b652f43616c6c536974653b01000c496e6e6572436c61737365730700590100186a6176612f6c616e672f546872656164244275696c6465720100074275696c6465720100094f665669727475616c07005d0100256a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c6573244c6f6f6b757007005f01001e6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c65730100064c6f6f6b75700021002600020001003400000004000100050006000100360000002f00010001000000052ab70001b10000000200370000000600010000000f00380000000c0001000000050039003a000000010029002a00020036000000720005000400000022b80007b9000d01004d2b04bd00025903121353b800154e2c2dba001b0000b8001fb00000000200370000000e000300000013000900140017001500380000002a0004000000220039003a000000000022003b003c0001000900190011003d00020017000b003e003c0003003f0000000501003b0000104100290040000200360000003300020002000000092a2bc00016b60025b00000000200370000000600010000000f00380000000c0001000000090039003a0000003f0000000501003b1000100a00410042000100360000005f000200040000000f2a2cb9002b02004e2d2bb600302db00000000200370000000e00030000001600080017000d001800380000002a00040000000f0011003d00000000000f003e003c00010000000f0043004400020008000700450046000300040047000000020048004900000002004a004b0000000c000100500003004c004d004c00570000001a000300580008005a0609000e0058005b0609005c005e00600019"; - private static final Consumer virtualRunnerConsumer; + private static final Function virtualPoolFunction; + + //org.redkale.util.AnonymousVirtualExecutor + private static final String consumerVirtualExecutorBinary = "cafebabe00000041002e0a000200030700040c000500060100106a6176612f6c616e672f4f626a6563740100063c696e69743e0100032829560a0008000907000a0c000b000c0100106a6176612f6c616e672f5468726561640100096f665669727475616c01002628294c6a6176612f6c616e672f546872656164244275696c646572244f665669727475616c3b08000e0100155265646b616c652d5669727475616c5468726561640b001000110700120c001300140100226a6176612f6c616e672f546872656164244275696c646572244f665669727475616c0100046e616d65010038284c6a6176612f6c616e672f537472696e673b294c6a6176612f6c616e672f546872656164244275696c646572244f665669727475616c3b0b001000160c001700180100057374617274010028284c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b07001a0100296f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c4578656375746f7207001c01001d6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c650100047468697301002b4c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c4578656375746f723b01000765786563757465010017284c6a6176612f6c616e672f52756e6e61626c653b2956010001740100144c6a6176612f6c616e672f52756e6e61626c653b0100104d6574686f64506172616d657465727301000a536f7572636546696c6501001d416e6f6e796d6f75735669727475616c4578656375746f722e6a61766101000c496e6e6572436c617373657307002b0100186a6176612f6c616e672f546872656164244275696c6465720100074275696c6465720100094f665669727475616c0021001900020001001b000000020001000500060001001d0000002f00010001000000052ab70001b100000002001e0000000600010000000e001f0000000c0001000000050020002100000001002200230002001d0000004a0002000200000012b80007120db9000f02002bb90015020057b100000002001e0000000a00020000001200110013001f00000016000200000012002000210000000000120024002500010026000000050100240000000200270000000200280029000000120002002a0008002c06090010002a002d0609"; + + private static final Executor virtualExecutorConsumer; //org.redkale.util.SignalShutDown private static final String consumerSignalShutdownBinary = "cafebabe00000037006b0a0019003a090018003b07003c08003d08003e08003f0800400800410800420800430800440800450700460a000d00470a000d004807004907004a0a000d004b0a000d004c12000000500b001600510700520a0018005307005407005507005601001073687574646f776e436f6e73756d657201001d4c6a6176612f7574696c2f66756e6374696f6e2f436f6e73756d65723b0100095369676e61747572650100314c6a6176612f7574696c2f66756e6374696f6e2f436f6e73756d65723c4c6a6176612f6c616e672f537472696e673b3e3b0100063c696e69743e010003282956010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c65010004746869730100214c6f72672f7265646b616c652f7574696c2f5369676e616c53687574446f776e3b010006616363657074010020284c6a6176612f7574696c2f66756e6374696f6e2f436f6e73756d65723b29560100037369670100124c6a6176612f6c616e672f537472696e673b010004736967730100135b4c6a6176612f6c616e672f537472696e673b010008636f6e73756d65720100164c6f63616c5661726961626c65547970655461626c6501000d537461636b4d61705461626c6507002b0100104d6574686f64506172616d6574657273010034284c6a6176612f7574696c2f66756e6374696f6e2f436f6e73756d65723c4c6a6176612f6c616e672f537472696e673b3e3b295601000668616e646c65010014284c73756e2f6d6973632f5369676e616c3b29560100114c73756e2f6d6973632f5369676e616c3b010006736967737472010015284c6a6176612f6c616e672f4f626a6563743b295601007a4c6a6176612f6c616e672f4f626a6563743b4c6a6176612f7574696c2f66756e6374696f6e2f436f6e73756d65723c4c6a6176612f7574696c2f66756e6374696f6e2f436f6e73756d65723c4c6a6176612f6c616e672f537472696e673b3e3b3e3b4c73756e2f6d6973632f5369676e616c48616e646c65723b01000a536f7572636546696c650100135369676e616c53687574446f776e2e6a6176610c001f00200c001b001c0100106a6176612f6c616e672f537472696e670100034855500100045445524d010003494e54010004515549540100044b494c4c01000454535450010004555352310100045553523201000453544f5001000f73756e2f6d6973632f5369676e616c0c001f00570c003200580100136a6176612f6c616e672f457863657074696f6e0100136a6176612f6c616e672f5468726f7761626c650c0059005a0c005b005c010010426f6f7473747261704d6574686f64730f06005d08005e0c005f00600c0026003601001b6a6176612f7574696c2f66756e6374696f6e2f436f6e73756d65720c0026002701001f6f72672f7265646b616c652f7574696c2f5369676e616c53687574446f776e0100106a6176612f6c616e672f4f626a65637401001673756e2f6d6973632f5369676e616c48616e646c6572010015284c6a6176612f6c616e672f537472696e673b2956010043284c73756e2f6d6973632f5369676e616c3b4c73756e2f6d6973632f5369676e616c48616e646c65723b294c73756e2f6d6973632f5369676e616c48616e646c65723b0100076765744e616d6501001428294c6a6176612f6c616e672f537472696e673b0100096765744e756d6265720100032829490a00610062010005012c012c010100176d616b65436f6e63617457697468436f6e7374616e7473010038284c73756e2f6d6973632f5369676e616c3b4c6a6176612f6c616e672f537472696e673b49294c6a6176612f6c616e672f537472696e673b0700630c005f00670100246a6176612f6c616e672f696e766f6b652f537472696e67436f6e636174466163746f72790700690100064c6f6f6b757001000c496e6e6572436c6173736573010098284c6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c6573244c6f6f6b75703b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b4c6a6176612f6c616e672f537472696e673b5b4c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f696e766f6b652f43616c6c536974653b07006a0100256a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c6573244c6f6f6b757001001e6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c657300210018001900020016001a00010002001b001c0001001d00000002001e00040001001f0020000100210000002f00010001000000052ab70001b10000000200220000000600010000000c00230000000c000100000005002400250000000100260027000300210000014a000400080000006f2a2bb500021009bd0003590312045359041205535905120653590612075359071208535908120953591006120a53591007120b53591008120c534d2c4e2dbe360403360515051504a200222d1505323a06bb000d591906b7000e2ab8000f57a700053a07840501a7ffdda700044db100020051005f006200100005006a006d0011000400220000002a000a0000001200050014003b001500510017005f00190062001800640015006a001c006d001b006e001d00230000002a000400510013002800290006003b002f002a002b00020000006f0024002500000000006f002c001c0001002d0000000c00010000006f002c001e0001002e000000470006ff0044000607001807001607002f07002f01010000ff001d000707001807001607002f07002f01010700030001070010fa0001ff000500020700180700160000420700110000300000000501002c0000001d0000000200310021003200330002002100000060000300030000001a2b2bb600122bb60013ba001400004d2ab400022cb900150200b10000000200220000000e000300000021000f00220019002300230000002000030000001a0024002500000000001a002800340001000f000b0035002900020030000000050100280000104100260036000200210000003300020002000000092a2bc00016b60017b10000000200220000000600010000000c00230000000c00010000000900240025000000300000000501002c10000004001d000000020037003800000002003900660000000a00010064006800650019004d000000080001004e0001004f"; @@ -128,34 +128,13 @@ public final class Utility { Predicate strLatin1Function0 = null; ToLongFunction bufferAddrFunction0 = null; Consumer> signalShutdownConsumer0 = null; - Function virtualExecutorFunction0 = null; Function virtualThreadLocalFunction0 = null; - Consumer virtualRunnerConsumer0 = null; + Function virtualPoolFunction0 = null; + Executor virtualExecutorConsumer0 = null; if (!nativeImageEnv) { //not native-image try { final ClassLoader loader = Thread.currentThread().getContextClassLoader(); - { //virtualExecutorFunction - Class> virtualClazz1 = null; - try { - virtualClazz1 = (Class) loader.loadClass("org.redkale.util.AnonymousVirtualExecutor"); - } catch (Throwable t) { - } - if (virtualClazz1 == null) { - byte[] classBytes = hexToBin(functionVirtualExecutorBinary); - try { - virtualClazz1 = (Class>) new ClassLoader(loader) { - public final Class loadClass(String name, byte[] b) { - return defineClass(name, b, 0, b.length); - } - }.loadClass("org.redkale.util.AnonymousVirtualExecutor", classBytes); - RedkaleClassLoader.putDynClass(virtualClazz1.getName(), classBytes, virtualClazz1); - RedkaleClassLoader.putReflectionDeclaredConstructors(virtualClazz1, virtualClazz1.getName()); - virtualExecutorFunction0 = virtualClazz1.getConstructor().newInstance(); - } catch (Throwable t) { - } - } - } { //virtualThreadLocalFunction Class> virtualClazz1 = null; try { @@ -178,23 +157,44 @@ public final class Utility { } } } - { //virtualRunnerConsumer - Class> virtualClazz1 = null; + { //virtualPoolFunction + Class> virtualClazz1 = null; try { - virtualClazz1 = (Class) loader.loadClass("org.redkale.util.AnonymousVirtualRunner"); + virtualClazz1 = (Class) loader.loadClass("org.redkale.util.AnonymousVirtualPoolFunction"); } catch (Throwable t) { } if (virtualClazz1 == null) { - byte[] classBytes = hexToBin(consumerVirtualRunnerBinary); + byte[] classBytes = hexToBin(functionVirtualPoolBinary); try { - virtualClazz1 = (Class>) new ClassLoader(loader) { + virtualClazz1 = (Class>) new ClassLoader(loader) { public final Class loadClass(String name, byte[] b) { return defineClass(name, b, 0, b.length); } - }.loadClass("org.redkale.util.AnonymousVirtualRunner", classBytes); + }.loadClass("org.redkale.util.AnonymousVirtualPoolFunction", classBytes); RedkaleClassLoader.putDynClass(virtualClazz1.getName(), classBytes, virtualClazz1); RedkaleClassLoader.putReflectionDeclaredConstructors(virtualClazz1, virtualClazz1.getName()); - virtualRunnerConsumer0 = virtualClazz1.getConstructor().newInstance(); + virtualPoolFunction0 = virtualClazz1.getConstructor().newInstance(); + } catch (Throwable t) { + } + } + } + { //virtualExecutorConsumer + Class virtualClazz1 = null; + try { + virtualClazz1 = (Class) loader.loadClass("org.redkale.util.AnonymousVirtualExecutor"); + } catch (Throwable t) { + } + if (virtualClazz1 == null) { + byte[] classBytes = hexToBin(consumerVirtualExecutorBinary); + try { + virtualClazz1 = (Class) new ClassLoader(loader) { + public final Class loadClass(String name, byte[] b) { + return defineClass(name, b, 0, b.length); + } + }.loadClass("org.redkale.util.AnonymousVirtualExecutor", classBytes); + RedkaleClassLoader.putDynClass(virtualClazz1.getName(), classBytes, virtualClazz1); + RedkaleClassLoader.putReflectionDeclaredConstructors(virtualClazz1, virtualClazz1.getName()); + virtualExecutorConsumer0 = virtualClazz1.getConstructor().newInstance(); } catch (Throwable t) { } } @@ -266,9 +266,9 @@ public final class Utility { strLatin1Function = strLatin1Function0; bufferAddrFunction = bufferAddrFunction0; signalShutdownConsumer = signalShutdownConsumer0; - virtualExecutorFunction = virtualExecutorFunction0; + virtualPoolFunction = virtualPoolFunction0; virtualThreadLocalFunction = virtualThreadLocalFunction0; - virtualRunnerConsumer = virtualRunnerConsumer0; + virtualExecutorConsumer = virtualExecutorConsumer0; // try { // DEFAULTSSL_CONTEXT = javax.net.ssl.SSLContext.getInstance("SSL"); @@ -303,7 +303,7 @@ public final class Utility { } public static Function virtualExecutorFunction() { - return virtualExecutorFunction; + return virtualPoolFunction; } public static ThreadLocal withInitialThreadLocal(Supplier supplier) { @@ -323,8 +323,8 @@ public final class Utility { } public static void execute(Runnable task) { - if (virtualRunnerConsumer != null) { - virtualRunnerConsumer.accept(task); + if (virtualExecutorConsumer != null) { + virtualExecutorConsumer.execute(task); } else { task.run(); }