タイトルはほとんど自明です。
AMQP.BasicProperties.Builder
スレッドセーフですか?引用/ソース?
どちらかを示すものは見つかりません...
いいえ、AMQP.BasicProperties.Builder はスレッドセーフではありません。次のクラスを使用してテストしました。
package com.anarsoft.agent;
import java.util.concurrent.atomic.AtomicInteger;
import com.rabbitmq.client.AMQP;
public class TestRabbitMq extends Thread {
static final AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();
static final AtomicInteger threadCount = new AtomicInteger();
public void run() {
builder.clusterId("444").build();
threadCount.decrementAndGet();
}
public static void main(String[] args) throws Exception
{
for( int i = 0 ; i < 8 ; i++)
{
TestRabbitMq testNumberFormat = new TestRabbitMq();
threadCount.addAndGet(1);
testNumberFormat.start();
}
while(threadCount.get() > 0)
{
Thread.sleep(1000);
}
}
}
http://vmlens.comは、フィールドが同期なしでアクセスされることを示しています。http://vmlens.comによって生成されたトレース:
com/rabbitmq/client/AMQP$BasicProperties$Builder.clusterId@28470003 (8,8)
Thread-0 (9)
Thread-1 (10) com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.anarsoft.agent.TestRabbitMq.run
Thread-2 (11) com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.anarsoft.agent.TestRabbitMq.run
Thread-3 (12) com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.anarsoft.agent.TestRabbitMq.run
Thread-4 (13) com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.anarsoft.agent.TestRabbitMq.run
Thread-5 (14) com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.anarsoft.agent.TestRabbitMq.run
Thread-6 (15) com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.anarsoft.agent.TestRabbitMq.run
Thread-7 (16) com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.rabbitmq.client.AMQP$BasicProperties$Builder.clusterId
com.anarsoft.agent.TestRabbitMq.run
スレッドセーフではないソースも参照できます: http://grepcode.com/file/repo1.maven.org/maven2/com.rabbitmq/amqp-client/2.6.1/com/rabbitmq/client/AMQP。 java#AMQP.BasicProperties.Builder
public Builder clusterId(String clusterId)
{ this.clusterId = clusterId; return this; }