Tech&W_ProgrammingBasic_Java_concurrency
concurrency
线程池大小设置
N(threads) = N(cpu cores) + U(use rate) + ( 1 + W/C)
处理器核心数 + 期望利用率( 0 - 1) + 等待时间 除以 计算时间
Runtime.getRuntime().available Processors()
2020-06-09
1 public void concurrentAccessFromMultipleThreads() throws Exception{ 2 final CountDownLatchDemo.Counter counter = new CountDownLatchDemo.Counter(); 3 4 final int numberOfThread = 10; 5 final CountDownLatch allThreadsComplete = 6 new CountDownLatch(numberOfThread); // 同步锁存器 7 8 final int callsPerThread = 100; 9 final Set<Long> values = new HashSet<Long>(); 10 Runnable runnable = new Runnable() { 11 @Override 12 public void run() { 13 for (int i = 0; i < callsPerThread; i++) { 14 values.add(counter.getAndIncrement()); 15 16 } 17 allThreadsComplete.countDown(); // 将线程标记为完成 18 } 19 }; 20 21 for (int i = 0; i < numberOfThread; i++) { 22 new Thread(runnable).start(); 23 } 24 allThreadsComplete.await(10, TimeUnit.MINUTES); // 等待线程完成 25 26 int expectedNoOfValues = numberOfThread * callsPerThread; 27 assertEquals(expectedNoOfValues, values.size()); 28 }
public class CountDownLatchDemo { public static class Counter { public AtomicLong count = new AtomicLong(1); public long getAndIncrement() { return count.getAndIncrement(); } } }
configurate Executor
Daemon
线程数量 n = N(cpu core) + U(use rate ) + ( w/u + 1) 等待与计算时间比率



浙公网安备 33010602011771号