/Concurrency/src/main/java/com/mmall/concurrency/example/count/CountExample.java
package com.mmall.concurrency.example.count; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import lombok.extern.slf4j.Slf4j; @Slf4j public class CountExample { private static int threadTotal = 200; private static int clientTotal = 5000; private static int count = 0; private static final Logger log = LoggerFactory.getLogger(CountExample.class); public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(threadTotal); for (int index = 0; index < clientTotal; index++) { exec.execute(() -> { try { semaphore.acquire(); add(); semaphore.release(); } catch (Exception e) { // TODO Auto-generated catch block log.error("exception",e); } }); } exec.shutdown(); log.info("count:{}", count); } private static void add() { count++; } }
/Concurrency/src/main/java/com/mmall/concurrency/example/count/MapExample.java
package com.mmall.concurrency.example.count; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; @Slf4j public class MapExample { private static Map<Integer, Integer> map = Maps.newHashMap(); private static int threadNum = 200; private static int clientNum = 5000; private static final Logger log = LoggerFactory.getLogger(MapExample.class); public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(threadNum); for (int index = 0; index< clientNum; index++) { final int threadNum = index; exec.execute(() -> { try { semaphore.acquire(); func(threadNum); semaphore.release(); } catch (Exception e) { // TODO Auto-generated catch block log.error("exception", e); } }); } exec.shutdown(); log.info("size:{}",map.size()); } public static void func(int threadNum) { map.put(threadNum, threadNum); } }
threadNum=1
/Concurrency/src/main/java/com/mmall/concurrency/example/count/MapExample.java
package com.mmall.concurrency.example.count; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; @Slf4j public class MapExample { private static Map<Integer, Integer> map = Maps.newHashMap(); private static int threadNum = 1; private static int clientNum = 5000; private static final Logger log = LoggerFactory.getLogger(MapExample.class); public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(threadNum); for (int index = 0; index< clientNum; index++) { final int threadNum = index; exec.execute(() -> { try { semaphore.acquire(); func(threadNum); semaphore.release(); } catch (Exception e) { // TODO Auto-generated catch block log.error("exception", e); } }); } exec.shutdown(); log.info("size:{}",map.size()); } public static void func(int threadNum) { map.put(threadNum, threadNum); } }
threadNum=1
/Concurrency/src/main/java/com/mmall/concurrency/example/count/CountExample.java
package com.mmall.concurrency.example.count; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import lombok.extern.slf4j.Slf4j; @Slf4j public class CountExample { private static int threadTotal = 1; private static int clientTotal = 5000; private static int count = 0; private static final Logger log = LoggerFactory.getLogger(CountExample.class); public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(threadTotal); for (int index = 0; index < clientTotal; index++) { exec.execute(() -> { try { semaphore.acquire(); add(); semaphore.release(); } catch (Exception e) { // TODO Auto-generated catch block log.error("exception",e); } }); } exec.shutdown(); log.info("count:{}", count); } private static void add() { count++; } }
/Concurrency/pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mmall.concurrency</groupId> <artifactId>Concurrency</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>Concurrency</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>23.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>