小编May*_*yur的帖子

如何将java.lang.String的空白JSON字符串值反序列化为null?

我正在尝试一个简单的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 …

java json jackson

19
推荐指数
3
解决办法
2万
查看次数

System.out.printf()语句是异步的吗?

我打印信息以使用重入锁测试线程.我使用语句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)

java multithreading output

2
推荐指数
1
解决办法
2095
查看次数

用于保存在内存日志中的List实现的类型

我正在为应用程序开发一个自定义appender,它会将日志消息写入应用程序级变量列表.因此,在应用程序中运行的所有线程都将访问此列表,以便同时向此列表添加消息(只写操作).还有一个单独的工作,也可以同时访问此列表,并每隔几毫秒批量删除25个项目.因此,列表上的添加和删除操作将同时执行.现在,我的问题是,如果我可以使用java.util.ArrayList?我在某处看到,同时向ArrayList添加项目可能会出现问题.此外,当我们尝试从列表中删除25个项目而其他线程添加到列表时,肯定会出现问题.

如果我创建自己的List MYList实现,它只是创建一个新的remove25()方法并对此方法使用synchronize限定符,它会解决我的问题吗?或者我应该去更安全的选项,比如CopyOnWriteArrayList,这可能是非常糟糕的性能(??),因为日志操作需要同时由许多应用程序线程完成.请指教.

一个更新:因为我不需要随机访问,只需要顺序访问大量的添加和删除操作,链接列表类型的实现会更好.

java concurrency list

1
推荐指数
1
解决办法
75
查看次数

标签 统计

java ×3

concurrency ×1

jackson ×1

json ×1

list ×1

multithreading ×1

output ×1