`
corleonelu
  • 浏览: 9673 次
  • 性别: 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
分享到:
评论

相关推荐

    backport-util-concurrent(2.2 /3.1)

    - 虽然Java 5引入了Atomic包,但在backport-util-concurrent中,你可以找到一些基本的原子操作类,如AtomicInteger和AtomicLong,它们提供了无锁的整数和长整型变量操作,提高了并发环境下的性能。 总的来说,...

    java concurrent 精简源码

    这个“java concurrent 精简源码”资源很可能会包含上述概念的实际应用示例,通过学习和分析这些代码,你可以深入理解Java并发编程的精髓,并能更好地应用于实际项目中。在研究时,建议结合Java官方文档和相关的书籍...

    javaconcurrent源码-java_concurrent:javaconcurrent包源代码学习,及相关实践示例

    本资源——`java_concurrent` 源码,提供了对Java并发包的深入学习材料以及实践示例,旨在帮助开发者深入理解并发编程背后的机制。 在`java.util.concurrent`包中,有几个重要的类和接口,它们构成了Java并发编程的...

    Java-concurrency-master.zip

    2. **线程同步**:在多线程环境下,数据共享可能导致数据不一致问题,Java提供了多种同步机制,如`synchronized`关键字、`Lock`接口(包括`ReentrantLock`)以及`volatile`关键字,以确保线程安全。 3. **并发集合*...

    java.util.concurrent 学习ppt

    Java.util.concurrent的引入是为了解决传统并发原语如wait()、notify()、synchronized和volatile的使用难度大、容易出错以及性能问题。 在并发编程中,我们经常会遇到需要管理多个线程执行任务的情况。传统的做法是...

    java源码总结-Java-Concurrent-Programming:java并发编程学习总结源码部分

    此外,`java.util.concurrent.atomic`包中的原子类(如`AtomicInteger`、`AtomicReference`)提供了无锁编程的可能性,通过硬件级别的CAS操作实现线程间的协作。在源码中,这些原子类可能会被用来实现非阻塞的数据...

    java-Thread-study-summary.zip_java 多线程

    - `Lock`和`Condition`:`java.util.concurrent.locks`包提供了更灵活的锁机制,如`ReentrantLock`,可以精确控制线程唤醒和等待。 4. **线程优先级** Java线程有10个优先级,`MIN_PRIORITY`(1),`NORM_...

    java并发源码-java-concurrent-test:和朱晔一起复习Java并发系列文章

    2. **并发控制**:Java提供了多种并发控制工具,如`synchronized`关键字、`wait()`/`notify()`、`Lock`接口(包括`ReentrantLock`可重入锁)及其相关的`Condition`条件对象。 3. **原子操作**:`java.util....

    Java并发实践-学习笔记

    2. **同步机制**:Java提供了多种同步机制来确保线程安全,如`synchronized`关键字、`volatile`关键字、`Lock`接口(如`ReentrantLock`)以及`Atomic`类。笔记会详细解释它们的工作原理和使用场景。 3. **线程通信*...

    Java多线程 - (一) 最简单的线程安全问题

    3. **Lock接口**:Java提供`java.util.concurrent.locks.Lock`接口,提供了比`synchronized`更细粒度的锁控制,如可重入锁、公平锁等。例如,`ReentrantLock`。 ```java import java.util.concurrent.locks.Lock; ...

    java线程-Atomic的含义及示例_.docx

    Java开发工具包(JDK)提供了`java.util.concurrent.atomic`包来处理原子操作的需求。这个包中的类主要用于解决多线程环境中数据的一致性和并发问题,它们通过内部机制确保了操作的原子性,从而避免了显式锁的使用,...

    Java-Concurrency-in-Practice.rar

    - **java.util.concurrent.atomic包**:包含一系列原子类,如AtomicInteger、AtomicReference等,它们提供了无锁编程的可能性。 - **Lock接口与ReentrantLock**:对比synchronized,讲解了显式锁的优势和用法。 -...

    简单了解synchronized和lock的区别

    Java中的synchronized和ReentrantLock等独占锁就是悲观锁思想的实现,而java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。 线程阻塞的代价是很高的,因为线程状态的切换...

    java并发编程-构建块

    - **Lock接口**:ReentrantLock是Lock接口的实现,提供了比synchronized更细粒度的锁控制,如公平锁、非公平锁、可中断锁和读写锁。 - ** volatile关键字**:保证变量在所有线程间可见,防止编译器优化导致的缓存...

    Java-并发(Concurrent)编程

    在实际应用中,我们还需要考虑线程安全问题,例如使用`synchronized`、`volatile`、`Atomic`类或Lock来保证数据一致性。此外,合理使用线程池(如`ThreadPoolExecutor`)可以有效地管理线程生命周期,避免创建和销毁...

    Java并发编程-线程安全与基础构建模块

    1. **同步机制**:包括`synchronized`关键字和`java.util.concurrent`包中的工具类。synchronized可以修饰方法或代码块,确保同一时间只有一个线程能执行特定代码,防止数据不一致。而`java.util.concurrent`提供了...

    Java并发编程:设计原则与模式(Concurrent.Programming.in.Java)(中英版)

    例如,使用无锁数据结构或原子操作(`java.util.concurrent.atomic`包)。 3. **避免死锁、活锁和饥饿**:理解并预防这些并发问题至关重要。死锁发生在两个或多个线程相互等待对方释放资源导致僵局;活锁是线程不断...

    Java的concurrent包动画演示

    5. **Synchronized与Lock**:`synchronized`关键字提供了内置锁机制,确保同一时间只有一个线程访问共享资源。`concurrent`包中的`ReentrantLock`提供了更细粒度的锁控制,包括公平锁和非公平锁,以及可中断和定时...

    java并发编程实战源码-concurrent-programming:《Java并发编程实战》源码整理

    3. **同步机制**:Java提供了多种同步机制,包括`synchronized`关键字、`Lock`接口及其实现(如`ReentrantLock`)、`Semaphore`信号量、`CyclicBarrier`和`CountDownLatch`等。这些机制用于控制并发访问资源,防止...

    java高并发源码-java-concurrent:Java高并发,JUC,相关源码。1、马士兵高并发视频源码(听课时练习)

    "java-concurrent"这个项目显然聚焦于Java并发编程的实践与学习,特别是通过马士兵老师的高并发视频课程的源码进行深入研究。JUC,全称Java Util Concurrency,是Java平台标准版(Java SE)的一部分,提供了丰富的...

Global site tag (gtag.js) - Google Analytics