diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/channel/ThreadLocalChannelTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/channel/ThreadLocalChannelTests.java index f2575e3a3f..d3cd1d1dd0 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/channel/ThreadLocalChannelTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/channel/ThreadLocalChannelTests.java @@ -23,6 +23,10 @@ import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import org.junit.Before; import org.junit.Test; @@ -74,4 +78,41 @@ public class ThreadLocalChannelTests { assertNull(channel.receive()); } + @Test + public void multipleThreadLocalChannels() throws Exception { + final ThreadLocalChannel channel1 = new ThreadLocalChannel(); + final ThreadLocalChannel channel2 = new ThreadLocalChannel(); + channel1.send(new StringMessage("test-1.1")); + channel1.send(new StringMessage("test-1.2")); + channel1.send(new StringMessage("test-1.3")); + channel2.send(new StringMessage("test-2.1")); + channel2.send(new StringMessage("test-2.2")); + Executor otherThreadExecutor = Executors.newSingleThreadExecutor(); + final List otherThreadResults = new ArrayList(); + final CountDownLatch latch = new CountDownLatch(2); + otherThreadExecutor.execute(new Runnable() { + public void run() { + otherThreadResults.add(channel1.receive(0)); + latch.countDown(); + } + }); + otherThreadExecutor.execute(new Runnable() { + public void run() { + otherThreadResults.add(channel2.receive(0)); + latch.countDown(); + } + }); + latch.await(1, TimeUnit.SECONDS); + assertEquals(2, otherThreadResults.size()); + assertNull(otherThreadResults.get(0)); + assertNull(otherThreadResults.get(1)); + assertEquals("test-1.1", channel1.receive(0).getPayload()); + assertEquals("test-1.2", channel1.receive(0).getPayload()); + assertEquals("test-1.3", channel1.receive(0).getPayload()); + assertNull(channel1.receive(0)); + assertEquals("test-2.1", channel2.receive(0).getPayload()); + assertEquals("test-2.2", channel2.receive(0).getPayload()); + assertNull(channel2.receive(0)); + } + }