Update ParallelUtils.java and IOBiConsumer.java
This commit is contained in:
parent
a636411261
commit
c64a272bd1
|
@ -1,5 +1,6 @@
|
||||||
package org.warp.commonutils.batch;
|
package org.warp.commonutils.batch;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.concurrent.CompletionException;
|
import java.util.concurrent.CompletionException;
|
||||||
import java.util.concurrent.RejectedExecutionException;
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -8,6 +9,9 @@ import java.util.function.BiConsumer;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import org.warp.commonutils.concurrency.executor.BlockingOnFullQueueExecutorServiceDecorator;
|
import org.warp.commonutils.concurrency.executor.BlockingOnFullQueueExecutorServiceDecorator;
|
||||||
import org.warp.commonutils.concurrency.executor.BoundedExecutorService;
|
import org.warp.commonutils.concurrency.executor.BoundedExecutorService;
|
||||||
|
import org.warp.commonutils.functional.IOBiConsumer;
|
||||||
|
import org.warp.commonutils.functional.IOConsumer;
|
||||||
|
import org.warp.commonutils.functional.IOTriConsumer;
|
||||||
import org.warp.commonutils.functional.TriConsumer;
|
import org.warp.commonutils.functional.TriConsumer;
|
||||||
import org.warp.commonutils.type.IntWrapper;
|
import org.warp.commonutils.type.IntWrapper;
|
||||||
import org.warp.commonutils.type.ShortNamedThreadFactory;
|
import org.warp.commonutils.type.ShortNamedThreadFactory;
|
||||||
|
@ -15,6 +19,38 @@ import org.warp.commonutils.type.VariableWrapper;
|
||||||
|
|
||||||
public class ParallelUtils {
|
public class ParallelUtils {
|
||||||
|
|
||||||
|
public static <V> void parallelizeIO(IOConsumer<IOConsumer<V>> iterator,
|
||||||
|
int maxQueueSize,
|
||||||
|
int parallelism,
|
||||||
|
int groupSize,
|
||||||
|
IOConsumer<V> consumer) throws IOException {
|
||||||
|
Consumer<Consumer<V>> action = (cons) -> {
|
||||||
|
try {
|
||||||
|
iterator.consume(cons::accept);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
parallelize(action, maxQueueSize, parallelism, groupSize, (v) -> {
|
||||||
|
try {
|
||||||
|
consumer.consume(v);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
throw new CompletionException(ex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (CompletionException ex) {
|
||||||
|
if (ex.getCause() instanceof CompletionException && ex.getCause().getCause() instanceof IOException) {
|
||||||
|
throw (IOException) ex.getCause().getCause();
|
||||||
|
} else if (ex.getCause() instanceof IOException) {
|
||||||
|
throw (IOException) ex.getCause();
|
||||||
|
} else {
|
||||||
|
throw new IOException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static <V> void parallelize(Consumer<Consumer<V>> iterator,
|
public static <V> void parallelize(Consumer<Consumer<V>> iterator,
|
||||||
int maxQueueSize,
|
int maxQueueSize,
|
||||||
int parallelism,
|
int parallelism,
|
||||||
|
@ -94,6 +130,38 @@ public class ParallelUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <K, V> void parallelizeIO(IOConsumer<IOBiConsumer<K, V>> iterator,
|
||||||
|
int maxQueueSize,
|
||||||
|
int parallelism,
|
||||||
|
int groupSize,
|
||||||
|
IOBiConsumer<K, V> consumer) throws IOException {
|
||||||
|
Consumer<BiConsumer<K, V>> action = (cons) -> {
|
||||||
|
try {
|
||||||
|
iterator.consume(cons::accept);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
parallelize(action, maxQueueSize, parallelism, groupSize, (k, v) -> {
|
||||||
|
try {
|
||||||
|
consumer.consume(k, v);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
throw new CompletionException(ex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (CompletionException ex) {
|
||||||
|
if (ex.getCause() instanceof CompletionException && ex.getCause().getCause() instanceof IOException) {
|
||||||
|
throw (IOException) ex.getCause().getCause();
|
||||||
|
} else if (ex.getCause() instanceof IOException) {
|
||||||
|
throw (IOException) ex.getCause();
|
||||||
|
} else {
|
||||||
|
throw new IOException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static <K, V> void parallelize(Consumer<BiConsumer<K, V>> iterator,
|
public static <K, V> void parallelize(Consumer<BiConsumer<K, V>> iterator,
|
||||||
int maxQueueSize,
|
int maxQueueSize,
|
||||||
int parallelism,
|
int parallelism,
|
||||||
|
@ -184,6 +252,38 @@ public class ParallelUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <K1, K2, V> void parallelizeIO(IOConsumer<IOTriConsumer<K1, K2, V>> iterator,
|
||||||
|
int maxQueueSize,
|
||||||
|
int parallelism,
|
||||||
|
int groupSize,
|
||||||
|
IOTriConsumer<K1, K2, V> consumer) throws IOException {
|
||||||
|
Consumer<TriConsumer<K1, K2, V>> action = (cons) -> {
|
||||||
|
try {
|
||||||
|
iterator.consume(cons::accept);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
parallelize(action, maxQueueSize, parallelism, groupSize, (k1, k2, v) -> {
|
||||||
|
try {
|
||||||
|
consumer.accept(k1, k2, v);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
throw new CompletionException(ex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (CompletionException ex) {
|
||||||
|
if (ex.getCause() instanceof CompletionException && ex.getCause().getCause() instanceof IOException) {
|
||||||
|
throw (IOException) ex.getCause().getCause();
|
||||||
|
} else if (ex.getCause() instanceof IOException) {
|
||||||
|
throw (IOException) ex.getCause();
|
||||||
|
} else {
|
||||||
|
throw new IOException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static <K1, K2, V> void parallelize(Consumer<TriConsumer<K1, K2, V>> iterator,
|
public static <K1, K2, V> void parallelize(Consumer<TriConsumer<K1, K2, V>> iterator,
|
||||||
int maxQueueSize,
|
int maxQueueSize,
|
||||||
int parallelism,
|
int parallelism,
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package org.warp.commonutils.functional;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public interface IOBiConsumer<T, U> {
|
||||||
|
|
||||||
|
void consume(T t, U u) throws IOException;
|
||||||
|
}
|
Loading…
Reference in New Issue