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)   等待与计算时间比率

 

 

 



 

posted @ 2020-06-09 22:27  君子之行  阅读(5)  评论(0)    收藏  举报