JDK6的Random和System.nanoTime()引起的一个“大”bug

目前在做一个基于nats的paas项目时,碰到了一个诡异的问题。这个场景是业务A发送一个消息,业务B处理完以后应答,业务A拿到应答数据以后处理。

业务A --->request---->nats server dispatch--->业务B....--->发送应答---->nats server dispatch---->业务A

在我的macbook + JDK上运行时,大概有50%的概率会碰到业务A的两个线程收到同样的消息应答。

以下为业务A发送消息的代码,inbox是临时创建的一个唯一应答id(subject),如果是收到重复消息,应该是创建了不唯一的inbox。

	@Override
	public Request request(final String subject, String message, long timeout, TimeUnit unit, final Integer maxReplies, MessageHandler... messageHandlers) {
		assertNatsOpen();
		if (message == null) {
			throw new IllegalArgumentException("Message can NOT be null.");
		}
		final String inbox = createInbox();
		System.out.println(Thread.currentThread()+ " inbox == "+inbox);
		final Subscription subscription = subscribe(inbox, maxReplies);
		for (MessageHandler handler : messageHandlers) {
			subscription.addMessageHandler(handler);
		}

		final ScheduledExecutorService scheduler = (channel == null) ? eve
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值