我正在尝试一个简单的JSON来反序列化到java对象.不过,我,让空字符串值,java.lang.String属性值.在其余属性中,空值正在转换为空值(这就是我想要的).
我的JSON和相关的Java类如下所示.
JSON字符串:
{
"eventId" : 1,
"title" : "sample event",
"location" : ""
}
Run Code Online (Sandbox Code Playgroud)
EventBean类POJO:
public class EventBean {
public Long eventId;
public String title;
public String location;
}
Run Code Online (Sandbox Code Playgroud)
我的主要类代码:
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
try {
File file = new File(JsonTest.class.getClassLoader().getResource("event.txt").getFile());
JsonNode root = mapper.readTree(file);
// find out the applicationId
EventBean e = mapper.treeToValue(root, EventBean.class);
System.out.println("It is " + e.location);
}
Run Code Online (Sandbox Code Playgroud)
我期待打印"它是空的".相反,我得到"它是".显然,在转换为我的String对象类型时,Jackson不会将空字符串值视为NULL .
我读到了预期的地方.但是,这也是我想要避免的java.lang.String …
我打印信息以使用重入锁测试线程.我使用语句new ReentrantLock(true)创建公平锁.
在我使用锁的对象方法之一,我正在使用方法,例如
method() {
for (int n = 0; n < 3; n++) {
System.out.printf("%s: processing data \n",
Thread.currentThread().getName(), data.get());
TimeUnit.SECONDS.sleep(1);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在创建10个线程,所有线程应执行相同的语句3次执行此控制台print语句.但是,我没有得到输出,我看到每个线程以相同的顺序显示打印.例如
Thread 1: processing data hjjjj
Thread 2: processing data ghhjj
Thread 3: processing data uiyiii
Thread 2: processing data ghfrtu
......
......
Run Code Online (Sandbox Code Playgroud)
而我的期望如下:
Thread 1: processing data hjjjj
Thread 2: processing data ghhjj
Thread 3: processing data uiyiii
Thread 1: processing data uiyuii
Run Code Online (Sandbox Code Playgroud)
是因为公平性在起作用,但system.out.println的打印顺序与发出的打印命令序列不同?
这是我的课程..
public class PriceInfo {
private double price1 =1d, price2=2d;
ReadWriteLock …Run Code Online (Sandbox Code Playgroud) 我正在为应用程序开发一个自定义appender,它会将日志消息写入应用程序级变量列表.因此,在应用程序中运行的所有线程都将访问此列表,以便同时向此列表添加消息(只写操作).还有一个单独的工作,也可以同时访问此列表,并每隔几毫秒批量删除25个项目.因此,列表上的添加和删除操作将同时执行.现在,我的问题是,如果我可以使用java.util.ArrayList?我在某处看到,同时向ArrayList添加项目可能会出现问题.此外,当我们尝试从列表中删除25个项目而其他线程添加到列表时,肯定会出现问题.
如果我创建自己的List MYList实现,它只是创建一个新的remove25()方法并对此方法使用synchronize限定符,它会解决我的问题吗?或者我应该去更安全的选项,比如CopyOnWriteArrayList,这可能是非常糟糕的性能(??),因为日志操作需要同时由许多应用程序线程完成.请指教.
一个更新:因为我不需要随机访问,只需要顺序访问大量的添加和删除操作,链接列表类型的实现会更好.