json
This commit is contained in:
@@ -29,9 +29,24 @@ public abstract class TextConvert<R extends Reader, W extends Writer> extends Co
|
|||||||
|
|
||||||
public abstract <T> T convertFrom(final Type type, final String text);
|
public abstract <T> T convertFrom(final Type type, final String text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 序列化
|
||||||
|
*
|
||||||
|
* @see org.redkale.convert.json.JsonConvert#convertTo(java.lang.reflect.Type, java.lang.Object)
|
||||||
|
* @param value Object
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
public final String convertTo(final Object value) {
|
public final String convertTo(final Object value) {
|
||||||
return convertTo((Type) null, value);
|
return convertTo((Type) null, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 序列化
|
||||||
|
*
|
||||||
|
* @see org.redkale.convert.json.JsonConvert#convertTo(java.lang.reflect.Type, java.lang.Object)
|
||||||
|
* @param type Type
|
||||||
|
* @param value Object
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
public abstract String convertTo(final Type type, final Object value);
|
public abstract String convertTo(final Type type, final Object value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,11 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.convert.json;
|
package org.redkale.convert.json;
|
||||||
|
|
||||||
import static org.redkale.convert.json.JsonWriter.*;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import org.redkale.convert.*;
|
import org.redkale.convert.*;
|
||||||
|
import static org.redkale.convert.json.JsonWriter.*;
|
||||||
import org.redkale.util.*;
|
import org.redkale.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,6 +26,8 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
|
|
||||||
private static final byte[] BYTES_FALSEVALUE = "false".getBytes();
|
private static final byte[] BYTES_FALSEVALUE = "false".getBytes();
|
||||||
|
|
||||||
|
private static final byte[] BYTES_NULL = new byte[] {'n', 'u', 'l', 'l'};
|
||||||
|
|
||||||
private static final int TENTHOUSAND_MAX = 10001;
|
private static final int TENTHOUSAND_MAX = 10001;
|
||||||
|
|
||||||
private static final byte[][] TENTHOUSAND_BYTES = new byte[TENTHOUSAND_MAX][];
|
private static final byte[][] TENTHOUSAND_BYTES = new byte[TENTHOUSAND_MAX][];
|
||||||
@@ -105,10 +106,15 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
array.directFrom(content, count);
|
array.directFrom(content, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeNull() {
|
||||||
|
writeTo(BYTES_NULL);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void writeFieldName(EnMember member, String fieldName, Type fieldType, int fieldPos) {
|
public final void writeFieldName(EnMember member, String fieldName, Type fieldType, int fieldPos) {
|
||||||
if (this.comma) {
|
if (this.comma) {
|
||||||
writeTo(',');
|
writeTo(BYTE_COMMA);
|
||||||
}
|
}
|
||||||
if (member != null) {
|
if (member != null) {
|
||||||
byte[] bs = member.getJsonFieldNameBytes();
|
byte[] bs = member.getJsonFieldNameBytes();
|
||||||
@@ -117,7 +123,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
count += bs.length;
|
count += bs.length;
|
||||||
} else {
|
} else {
|
||||||
writeLatin1To(true, fieldName);
|
writeLatin1To(true, fieldName);
|
||||||
writeTo(':');
|
writeTo(BYTE_COLON);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,10 +171,10 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
int len = bs.length;
|
int len = bs.length;
|
||||||
if (quote) {
|
if (quote) {
|
||||||
byte[] src = expand(len + 2);
|
byte[] src = expand(len + 2);
|
||||||
src[count++] = '"';
|
src[count++] = BYTE_DQUOTE;
|
||||||
System.arraycopy(bs, 0, src, count, bs.length);
|
System.arraycopy(bs, 0, src, count, bs.length);
|
||||||
count += len;
|
count += len;
|
||||||
src[count++] = '"';
|
src[count++] = BYTE_DQUOTE;
|
||||||
} else {
|
} else {
|
||||||
byte[] src = expand(len);
|
byte[] src = expand(len);
|
||||||
System.arraycopy(bs, 0, src, count, bs.length);
|
System.arraycopy(bs, 0, src, count, bs.length);
|
||||||
@@ -230,10 +236,10 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
byte[] src = expand(len1 + len2 + 2);
|
byte[] src = expand(len1 + len2 + 2);
|
||||||
System.arraycopy(bs1, 0, src, count, len1);
|
System.arraycopy(bs1, 0, src, count, len1);
|
||||||
count += len1;
|
count += len1;
|
||||||
src[count++] = '"';
|
src[count++] = BYTE_DQUOTE;
|
||||||
System.arraycopy(bs2, 0, src, count, len2);
|
System.arraycopy(bs2, 0, src, count, len2);
|
||||||
count += len2;
|
count += len2;
|
||||||
src[count++] = '"';
|
src[count++] = BYTE_DQUOTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -249,7 +255,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
count += len1;
|
count += len1;
|
||||||
System.arraycopy(bs2, 0, src, count, len2);
|
System.arraycopy(bs2, 0, src, count, len2);
|
||||||
count += len2;
|
count += len2;
|
||||||
src[count++] = '}';
|
src[count++] = BYTE_RBRACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -265,7 +271,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
count += len1;
|
count += len1;
|
||||||
System.arraycopy(bs2, 0, src, count, len2);
|
System.arraycopy(bs2, 0, src, count, len2);
|
||||||
count += len2;
|
count += len2;
|
||||||
src[count++] = '}';
|
src[count++] = BYTE_RBRACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -281,7 +287,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
count += len1;
|
count += len1;
|
||||||
System.arraycopy(bs2, 0, src, count, len2);
|
System.arraycopy(bs2, 0, src, count, len2);
|
||||||
count += len2;
|
count += len2;
|
||||||
src[count++] = '}';
|
src[count++] = BYTE_RBRACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -289,12 +295,12 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
if (value == null && nullable()) {
|
if (value == null && nullable()) {
|
||||||
writeTo(fieldBytes);
|
writeTo(fieldBytes);
|
||||||
writeNull();
|
writeNull();
|
||||||
writeTo('}');
|
writeTo(BYTE_RBRACE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value == null || (tiny() && value.isEmpty())) {
|
if (value == null || (tiny() && value.isEmpty())) {
|
||||||
expand(1);
|
expand(1);
|
||||||
content[count++] = '}';
|
content[count++] = BYTE_RBRACE;
|
||||||
} else {
|
} else {
|
||||||
byte[] bs1 = fieldBytes;
|
byte[] bs1 = fieldBytes;
|
||||||
byte[] bs2 = Utility.latin1ByteArray(value);
|
byte[] bs2 = Utility.latin1ByteArray(value);
|
||||||
@@ -304,11 +310,11 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
int c = count;
|
int c = count;
|
||||||
System.arraycopy(bs1, 0, src, c, len1);
|
System.arraycopy(bs1, 0, src, c, len1);
|
||||||
c += len1;
|
c += len1;
|
||||||
src[c++] = '"';
|
src[c++] = BYTE_DQUOTE;
|
||||||
System.arraycopy(bs2, 0, src, c, len2);
|
System.arraycopy(bs2, 0, src, c, len2);
|
||||||
c += len2;
|
c += len2;
|
||||||
src[c++] = '"';
|
src[c++] = BYTE_DQUOTE;
|
||||||
src[c++] = '}';
|
src[c++] = BYTE_RBRACE;
|
||||||
count = c;
|
count = c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -316,16 +322,16 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
@Override // firstFieldBytes 必须带{开头
|
@Override // firstFieldBytes 必须带{开头
|
||||||
public void writeObjectByOnlyOneLatin1FieldValue(final byte[] firstFieldBytes, final String value) {
|
public void writeObjectByOnlyOneLatin1FieldValue(final byte[] firstFieldBytes, final String value) {
|
||||||
if (value == null && nullable()) {
|
if (value == null && nullable()) {
|
||||||
writeTo('{');
|
writeTo(BYTE_LBRACE);
|
||||||
writeTo(firstFieldBytes);
|
writeTo(firstFieldBytes);
|
||||||
writeNull();
|
writeNull();
|
||||||
writeTo('}');
|
writeTo(BYTE_RBRACE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value == null || (tiny() && value.isEmpty())) {
|
if (value == null || (tiny() && value.isEmpty())) {
|
||||||
expand(2);
|
expand(2);
|
||||||
content[count++] = '{';
|
content[count++] = BYTE_LBRACE;
|
||||||
content[count++] = '}';
|
content[count++] = BYTE_RBRACE;
|
||||||
} else {
|
} else {
|
||||||
byte[] bs1 = firstFieldBytes;
|
byte[] bs1 = firstFieldBytes;
|
||||||
byte[] bs2 = Utility.latin1ByteArray(value);
|
byte[] bs2 = Utility.latin1ByteArray(value);
|
||||||
@@ -335,11 +341,11 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
int c = count;
|
int c = count;
|
||||||
System.arraycopy(bs1, 0, src, c, len1);
|
System.arraycopy(bs1, 0, src, c, len1);
|
||||||
c += len1;
|
c += len1;
|
||||||
src[c++] = '"';
|
src[c++] = BYTE_DQUOTE;
|
||||||
System.arraycopy(bs2, 0, src, c, len2);
|
System.arraycopy(bs2, 0, src, c, len2);
|
||||||
c += len2;
|
c += len2;
|
||||||
src[c++] = '"';
|
src[c++] = BYTE_DQUOTE;
|
||||||
src[c++] = '}';
|
src[c++] = BYTE_RBRACE;
|
||||||
count = c;
|
count = c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -368,7 +374,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
count += len3;
|
count += len3;
|
||||||
System.arraycopy(bs4, 0, src, count, len4);
|
System.arraycopy(bs4, 0, src, count, len4);
|
||||||
count += len4;
|
count += len4;
|
||||||
src[count++] = '}';
|
src[count++] = BYTE_RBRACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JsonBytesWriter clear() {
|
public JsonBytesWriter clear() {
|
||||||
@@ -403,7 +409,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
byte[] bytes = expand(value.length * 2 + 2);
|
byte[] bytes = expand(value.length * 2 + 2);
|
||||||
int curr = count;
|
int curr = count;
|
||||||
if (quote) {
|
if (quote) {
|
||||||
bytes[curr++] = '"';
|
bytes[curr++] = BYTE_DQUOTE;
|
||||||
}
|
}
|
||||||
for (byte b : value) {
|
for (byte b : value) {
|
||||||
if (b == '"') {
|
if (b == '"') {
|
||||||
@@ -430,7 +436,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (quote) {
|
if (quote) {
|
||||||
bytes[curr++] = '"';
|
bytes[curr++] = BYTE_DQUOTE;
|
||||||
}
|
}
|
||||||
count = curr;
|
count = curr;
|
||||||
}
|
}
|
||||||
@@ -453,7 +459,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
byte[] bytes = expand(value.length() * 4 + 2);
|
byte[] bytes = expand(value.length() * 4 + 2);
|
||||||
int curr = count;
|
int curr = count;
|
||||||
if (quote) {
|
if (quote) {
|
||||||
bytes[curr++] = '"';
|
bytes[curr++] = BYTE_DQUOTE;
|
||||||
}
|
}
|
||||||
int len = value.length();
|
int len = value.length();
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
@@ -500,7 +506,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (quote) {
|
if (quote) {
|
||||||
bytes[curr++] = '"';
|
bytes[curr++] = BYTE_DQUOTE;
|
||||||
}
|
}
|
||||||
count = curr;
|
count = curr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,15 @@ class JsonStreamWriter extends JsonByteBufferWriter {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeTo(final byte ch) {
|
||||||
|
try {
|
||||||
|
out.write(ch);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ConvertException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeTo(final char ch) {
|
public void writeTo(final char ch) {
|
||||||
if (ch > Byte.MAX_VALUE) {
|
if (ch > Byte.MAX_VALUE) {
|
||||||
|
|||||||
@@ -22,6 +22,22 @@ public abstract class JsonWriter extends Writer {
|
|||||||
"redkale.convert.json.writer.buffer.defsize",
|
"redkale.convert.json.writer.buffer.defsize",
|
||||||
Integer.getInteger("redkale.convert.writer.buffer.defsize", 1024));
|
Integer.getInteger("redkale.convert.writer.buffer.defsize", 1024));
|
||||||
|
|
||||||
|
private static final char[] CHARS_NULL = new char[] {'n', 'u', 'l', 'l'};
|
||||||
|
|
||||||
|
protected static final byte BYTE_COMMA = ',';
|
||||||
|
|
||||||
|
protected static final byte BYTE_COLON = ':';
|
||||||
|
|
||||||
|
protected static final byte BYTE_LBRACE = '{';
|
||||||
|
|
||||||
|
protected static final byte BYTE_RBRACE = '}';
|
||||||
|
|
||||||
|
protected static final byte BYTE_LBRACKET = '[';
|
||||||
|
|
||||||
|
protected static final byte BYTE_RBRACKET = ']';
|
||||||
|
|
||||||
|
protected static final byte BYTE_DQUOTE = '"';
|
||||||
|
|
||||||
protected JsonWriter() {
|
protected JsonWriter() {
|
||||||
this.features = JsonFactory.root().getFeatures();
|
this.features = JsonFactory.root().getFeatures();
|
||||||
}
|
}
|
||||||
@@ -108,13 +124,13 @@ public abstract class JsonWriter extends Writer {
|
|||||||
@Override // 只容许JsonBytesWriter重写此方法
|
@Override // 只容许JsonBytesWriter重写此方法
|
||||||
public void writeFieldName(EnMember member, String fieldName, Type fieldType, int fieldPos) {
|
public void writeFieldName(EnMember member, String fieldName, Type fieldType, int fieldPos) {
|
||||||
if (this.comma) {
|
if (this.comma) {
|
||||||
writeTo(',');
|
writeTo(BYTE_COMMA);
|
||||||
}
|
}
|
||||||
if (member != null) {
|
if (member != null) {
|
||||||
writeTo(member.getJsonFieldNameChars());
|
writeTo(member.getJsonFieldNameChars());
|
||||||
} else {
|
} else {
|
||||||
writeLatin1To(true, fieldName);
|
writeLatin1To(true, fieldName);
|
||||||
writeTo(':');
|
writeTo(BYTE_COLON);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,52 +202,52 @@ public abstract class JsonWriter extends Writer {
|
|||||||
@Override
|
@Override
|
||||||
public final int writeObjectB(Object obj) {
|
public final int writeObjectB(Object obj) {
|
||||||
super.writeObjectB(obj);
|
super.writeObjectB(obj);
|
||||||
writeTo('{');
|
writeTo(BYTE_LBRACE);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void writeObjectE(Object obj) {
|
public final void writeObjectE(Object obj) {
|
||||||
writeTo('}');
|
writeTo(BYTE_RBRACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void writeNull() {
|
public void writeNull() {
|
||||||
writeTo('n', 'u', 'l', 'l');
|
writeTo(CHARS_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int writeArrayB(
|
public final int writeArrayB(
|
||||||
int size, Encodeable arrayEncoder, Encodeable<Writer, Object> componentEncoder, Object obj) {
|
int size, Encodeable arrayEncoder, Encodeable<Writer, Object> componentEncoder, Object obj) {
|
||||||
writeTo('[');
|
writeTo(BYTE_LBRACKET);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void writeArrayMark() {
|
public final void writeArrayMark() {
|
||||||
writeTo(',');
|
writeTo(BYTE_COMMA);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void writeArrayE() {
|
public final void writeArrayE() {
|
||||||
writeTo(']');
|
writeTo(BYTE_RBRACKET);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int writeMapB(
|
public final int writeMapB(
|
||||||
int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj) {
|
int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj) {
|
||||||
writeTo('{');
|
writeTo(BYTE_LBRACE);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void writeMapMark() {
|
public final void writeMapMark() {
|
||||||
writeTo(':');
|
writeTo(BYTE_COLON);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void writeMapE() {
|
public final void writeMapE() {
|
||||||
writeTo('}');
|
writeTo(BYTE_RBRACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static final char[] DigitTens = {
|
static final char[] DigitTens = {
|
||||||
|
|||||||
@@ -176,10 +176,6 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
// 主要给chunked和unzip用的
|
// 主要给chunked和unzip用的
|
||||||
private ByteArray array;
|
private ByteArray array;
|
||||||
|
|
||||||
private String lastPathString;
|
|
||||||
|
|
||||||
private byte[] lastPathBytes;
|
|
||||||
|
|
||||||
private final ByteArray bodyBytes;
|
private final ByteArray bodyBytes;
|
||||||
|
|
||||||
private final ByteArray headerBytes;
|
private final ByteArray headerBytes;
|
||||||
@@ -784,8 +780,6 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
: context.loadUriPath(bytes, qst, latin1, charset);
|
: context.loadUriPath(bytes, qst, latin1, charset);
|
||||||
int qlen = size - qst - 1;
|
int qlen = size - qst - 1;
|
||||||
this.queryBytes = bytes.getBytes(qst + 1, qlen);
|
this.queryBytes = bytes.getBytes(qst + 1, qlen);
|
||||||
this.lastPathString = null;
|
|
||||||
this.lastPathBytes = null;
|
|
||||||
try {
|
try {
|
||||||
addParameter(bytes, false, qst + 1, qlen);
|
addParameter(bytes, false, qst + 1, qlen);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -796,21 +790,8 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
} else { // 没有带?参数
|
} else { // 没有带?参数
|
||||||
if (decodeable) { // 需要转义
|
if (decodeable) { // 需要转义
|
||||||
this.requestPath = toDecodeString(bytes, 0, bytes.length(), charset);
|
this.requestPath = toDecodeString(bytes, 0, bytes.length(), charset);
|
||||||
this.lastPathString = null;
|
|
||||||
this.lastPathBytes = null;
|
|
||||||
} else if (context.lazyHeader) {
|
|
||||||
byte[] lastURIBytes = lastPathBytes;
|
|
||||||
if (lastURIBytes != null && lastURIBytes.length == size && bytes.deepEquals(lastURIBytes)) {
|
|
||||||
this.requestPath = this.lastPathString;
|
|
||||||
} else {
|
|
||||||
this.requestPath = context.loadUriPath(bytes, latin1, charset);
|
|
||||||
this.lastPathString = this.requestPath;
|
|
||||||
this.lastPathBytes = bytes.getBytes();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
this.requestPath = context.loadUriPath(bytes, latin1, charset);
|
this.requestPath = context.loadUriPath(bytes, latin1, charset);
|
||||||
this.lastPathString = null;
|
|
||||||
this.lastPathBytes = null;
|
|
||||||
}
|
}
|
||||||
this.queryBytes = EMPTY_BYTES;
|
this.queryBytes = EMPTY_BYTES;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public class ScheduledTest {
|
|||||||
System.out.println("开始执行");
|
System.out.println("开始执行");
|
||||||
Utility.sleep(2000);
|
Utility.sleep(2000);
|
||||||
manager.stop("task2");
|
manager.stop("task2");
|
||||||
Utility.sleep(1010);
|
Utility.sleep(1001);
|
||||||
manager.unschedule(service);
|
manager.unschedule(service);
|
||||||
manager.destroy(null);
|
manager.destroy(null);
|
||||||
Assertions.assertEquals(3, service.count1.get());
|
Assertions.assertEquals(3, service.count1.get());
|
||||||
|
|||||||
Reference in New Issue
Block a user