`
corleonelu
  • 浏览: 9526 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

java concurrent学习-简单的synchronized vs lock vs atomic

    博客分类:
  • java
 
阅读更多
package concurrentstudy;

import java.io.IOException;
import java.util.*;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;



public class CompareLock {
	public static  Integer count=0;
	public static AtomicInteger ai = new AtomicInteger(0);


	public static void main(String[] args) {
		
		ExecutorService es = Executors.newFixedThreadPool(100);
		long start= System.currentTimeMillis();
		for(int i=1;i<=200000;i++){
			es.submit(new Runnable() {
				
				public void run() {
					synchronized (ExecutorService.class) {
						count+=1;
					}
					
				}
			});
		}

		es.shutdown();
		while(!es.isTerminated()){
			
		}
		
		long end= System.currentTimeMillis();
		System.out.println(end-start);
		System.out.println(count);
		
		ExecutorService es2 = Executors.newFixedThreadPool(100);
		count=0;
		final Lock lock = new ReentrantLock ();
		long start2= System.currentTimeMillis();
		for(int i=1;i<=200000;i++){
			es2.submit(new Runnable() {
				
				public void run() {
					
					lock.lock();
					count+=1;
					lock.unlock();
					
				}
			});
		}
		es2.shutdown();
		while(!es2.isTerminated()){
			
		}
		
		long end2= System.currentTimeMillis();
		System.out.println(end2-start2);
		System.out.println(count);
		
		ExecutorService es3 = Executors.newFixedThreadPool(100);
		long start3= System.currentTimeMillis();
		for(int i=1;i<=200000;i++){
			es3.submit(new Runnable() {
				
				public void run() {
					CompareLock.ai.incrementAndGet();
				}
			});
		}
		es3.shutdown();
		while(!es3.isTerminated()){
			
		}
		long end3= System.currentTimeMillis();
		System.out.println(end3-start3);
		System.out.println(ai);
	}
}




输出:

437
200000
313
200000
265
200000
分享到:
评论

相关推荐

    Java-并发(Concurrent)编程

    资源概要:1,多线程;2,synchronized;3,volatile;4,多线程在JVM中的实现...原子类Atomic-CAS及其实现原理 锁Lock-AQS核心原理剖析 并发工具类、并发容器、阻塞队列 线程池原理剖析 线程池案例-Web容器-压力测试

    基础技术部牛路《Java多线程入阶分享》纯干货

    5.Lock-free:atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList 6.关于锁的经验介绍 7.并发流程控制手段:CountDownLatch、Barrier 8.定时器:ScheduledExecutorService、大规模定时器TimerWheel 9.并发三...

    Redis客户端Redisson.zip

    java.util.Queue 分布式 of java.util.Deque 分布式 java.util.Map 分布式 java.util.concurrent.ConcurrentMap 通过TTL实现可重入 java.util.concurrent.locks.Lock 分布式 java.util.concurrent.atomic....

    阿里Java并发程序设计教程

    5、Lock-free: atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList ☆ ☆ ☆ 6、关于锁使用的经验介绍 7、并发流程控制手段:CountDownlatch、Barrier 8、定时器: ScheduledExecutorService、大规模定时器...

    Java并发程序设计教程

    5、Lock-free: atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList☆☆☆ 6、关于锁使用的经验介绍 7、并发流程控制手段:CountDownlatch、Barrier 8、定时器: ScheduledExecutorService、大规模定时器...

    Java编程并发程序设计

    5、Lock-free: atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList☆☆☆ 6、关于锁使用的经验介绍 7、并发流程控制手段:CountDownlatch、Barrier 8、定时器: ScheduledExecutorService、大规模定时器...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    Thinking in Java 4th Edition

    Concurrent programming ... 32 Java and the Internet .......... 33 What is the Web? ......................... 33 Client-side programming ............ 34 Server-side programming ............ 38 Summary ...

Global site tag (gtag.js) - Google Analytics