-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
8, 9, 10, 11
-
x86_64
-
windows_7
A DESCRIPTION OF THE PROBLEM :
An parallel and generated IntStream, and set limit to 5, the generator should called 5 times, the consumer(forEach) should processing in multiple threads, but generator called more then 5 times(in java 8, it called hundreds times, and processing in one thread in java 8)
REGRESSION : Last worked in version 10.0.1
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
copy below source code to a main method:
AtomicInteger i = new AtomicInteger();
IntStream
.generate(
() -> {
int item = i.incrementAndGet();
System.out.println("[generator]ï¼ "
+ Thread.currentThread().getName()
+ ", item:" + item);
return item;
})
.limit(5)
.parallel()
.forEach(
item -> {
System.out.println("[consumer]: "
+ Thread.currentThread().getName()
+ ", item:" + item);
});
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
[generator]ï¼ main, item:1
[consumer]: main, item:1
[generator]ï¼ ForkJoinPool.commonPool-worker-11, item:2
[generator]ï¼ ForkJoinPool.commonPool-worker-4, item:4
[generator]ï¼ main, item:3
[generator]ï¼ ForkJoinPool.commonPool-worker-9, item:5
[consumer]: ForkJoinPool.commonPool-worker-4, item:4
[consumer]: ForkJoinPool.commonPool-worker-11, item:2
[consumer]: ForkJoinPool.commonPool-worker-13, item:5
[consumer]: main, item:3
ACTUAL -
[generator]ï¼ main, item:1
[generator]ï¼ ForkJoinPool.commonPool-worker-4, item:2
[generator]ï¼ ForkJoinPool.commonPool-worker-9, item:3
[consumer]: main, item:1
[generator]ï¼ ForkJoinPool.commonPool-worker-2, item:6
[consumer]: ForkJoinPool.commonPool-worker-9, item:3
[generator]ï¼ ForkJoinPool.commonPool-worker-13, item:5
[generator]ï¼ ForkJoinPool.commonPool-worker-11, item:4
[consumer]: ForkJoinPool.commonPool-worker-4, item:2
[consumer]: ForkJoinPool.commonPool-worker-13, item:5
[generator]ï¼ ForkJoinPool.commonPool-worker-9, item:10
[generator]ï¼ ForkJoinPool.commonPool-worker-6, item:9
[generator]ï¼ ForkJoinPool.commonPool-worker-15, item:8
[consumer]: ForkJoinPool.commonPool-worker-2, item:6
[generator]ï¼ main, item:7
---------- BEGIN SOURCE ----------
public static void main(String[] args) {
AtomicInteger i = new AtomicInteger();
IntStream
.generate(
() -> {
int item = i.incrementAndGet();
System.out.println("[generator]ï¼ "
+ Thread.currentThread().getName()
+ ", item:" + item);
return item;
})
.parallel()
.forEach(
item -> {
System.out.println("[consumer]: "
+ Thread.currentThread().getName()
+ ", item:" + item);
});
}
---------- END SOURCE ----------
FREQUENCY : always
An parallel and generated IntStream, and set limit to 5, the generator should called 5 times, the consumer(forEach) should processing in multiple threads, but generator called more then 5 times(in java 8, it called hundreds times, and processing in one thread in java 8)
REGRESSION : Last worked in version 10.0.1
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
copy below source code to a main method:
AtomicInteger i = new AtomicInteger();
IntStream
.generate(
() -> {
int item = i.incrementAndGet();
System.out.println("[generator]ï¼ "
+ Thread.currentThread().getName()
+ ", item:" + item);
return item;
})
.limit(5)
.parallel()
.forEach(
item -> {
System.out.println("[consumer]: "
+ Thread.currentThread().getName()
+ ", item:" + item);
});
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
[generator]ï¼ main, item:1
[consumer]: main, item:1
[generator]ï¼ ForkJoinPool.commonPool-worker-11, item:2
[generator]ï¼ ForkJoinPool.commonPool-worker-4, item:4
[generator]ï¼ main, item:3
[generator]ï¼ ForkJoinPool.commonPool-worker-9, item:5
[consumer]: ForkJoinPool.commonPool-worker-4, item:4
[consumer]: ForkJoinPool.commonPool-worker-11, item:2
[consumer]: ForkJoinPool.commonPool-worker-13, item:5
[consumer]: main, item:3
ACTUAL -
[generator]ï¼ main, item:1
[generator]ï¼ ForkJoinPool.commonPool-worker-4, item:2
[generator]ï¼ ForkJoinPool.commonPool-worker-9, item:3
[consumer]: main, item:1
[generator]ï¼ ForkJoinPool.commonPool-worker-2, item:6
[consumer]: ForkJoinPool.commonPool-worker-9, item:3
[generator]ï¼ ForkJoinPool.commonPool-worker-13, item:5
[generator]ï¼ ForkJoinPool.commonPool-worker-11, item:4
[consumer]: ForkJoinPool.commonPool-worker-4, item:2
[consumer]: ForkJoinPool.commonPool-worker-13, item:5
[generator]ï¼ ForkJoinPool.commonPool-worker-9, item:10
[generator]ï¼ ForkJoinPool.commonPool-worker-6, item:9
[generator]ï¼ ForkJoinPool.commonPool-worker-15, item:8
[consumer]: ForkJoinPool.commonPool-worker-2, item:6
[generator]ï¼ main, item:7
---------- BEGIN SOURCE ----------
public static void main(String[] args) {
AtomicInteger i = new AtomicInteger();
IntStream
.generate(
() -> {
int item = i.incrementAndGet();
System.out.println("[generator]ï¼ "
+ Thread.currentThread().getName()
+ ", item:" + item);
return item;
})
.parallel()
.forEach(
item -> {
System.out.println("[consumer]: "
+ Thread.currentThread().getName()
+ ", item:" + item);
});
}
---------- END SOURCE ----------
FREQUENCY : always