`

concurrent并发包学习

 
阅读更多

有一些辅助类真的不错:

1、CountDownLatch:等待其他几个(初始化值)任务执行完毕之后才能执行

public class Test {
     public static void main(String[] args) {   
         final CountDownLatch latch = new CountDownLatch(2);
          
         new Thread(){
             public void run() {
                 try {
                    Thread.sleep(1000);
                    latch.countDown();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
             };
         }.start();
          
         new Thread(){
             public void run() {
                 try {
                     Thread.sleep(1000);
                     latch.countDown();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
             };
         }.start();
          
         try {
            latch.await();
            System.out.println("主线程");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
     }
}

 

 

2、CyclicBarrier:一组线程等待至某个事件发生再全部同时执行

 

		final CyclicBarrier a = new CyclicBarrier(3, new Runnable() {
			@Override
			public void run() {
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("好咯,其他人都执行吧~~~");
			}
		});
		
		new Thread(){
			@Override
			public void run() {
				try {
					Thread.sleep(1000);
					a.await();
					System.out.println("我是1");
				} catch (Exception e) {
					e.printStackTrace();
				}
				super.run();
			}
		}.start();
		
		new Thread(){
			@Override
			public void run() {
				try {
					Thread.sleep(1000);
					a.await();
					System.out.println("我是2");
				} catch (Exception e) {
					e.printStackTrace();
				}
				super.run();
			}
		}.start();
		
		new Thread(){
			@Override
			public void run() {
				try {
					Thread.sleep(1000);
					a.await();
					System.out.println("我是3");
				} catch (Exception e) {
					e.printStackTrace();
				}
				super.run();
			}
		}.start();

 3、Semaphore:主要通过acquire() 和release()这两个方法。类似于锁的概念,对某资源占用期间,他人不能使用。

final Semaphore s = new Semaphore(2);
		new Thread(){
			public void run() {
				try {
					s.acquire();
					System.out.println("开始使用资源1");
					Thread.sleep(5000);
					System.out.println("放开资源1");
					s.release();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			};
		}.start();
		new Thread(){
			public void run() {
				try {
					s.acquire();
					System.out.println("开始使用资源2");
					Thread.sleep(5000);
					System.out.println("放开资源2");
					s.release();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			};
		}.start();
		new Thread(){
			public void run() {
				try {
					s.acquire();
					System.out.println("开始使用资源3");
					Thread.sleep(5000);
					System.out.println("放开资源3");
					s.release();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			};
		}.start();
		new Thread(){
			public void run() {
				try {
					s.acquire();
					System.out.println("开始使用资源4");
					Thread.sleep(5000);
					System.out.println("放开资源4");
					s.release();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			};
		}.start();

 

 

分享到:
评论

相关推荐

    concurrent 源代码

    这里的"concurrent源代码"可能是指Java并发包(`java.util.concurrent`)中的源代码,这个包包含了许多用于构建并发程序的关键工具和类。 1. **并发基础**: 在Java中,多线程是通过`Thread`类实现的,但`java.util....

    concurrent-resource-test:Java并发包源码学习

    Java并发包(java.util.concurrent)提供了丰富的类和接口,用于处理多线程环境下的同步、互斥以及线程间的协作。这个"concurrent-resource-test"项目很可能是为了深入理解和实践Java并发包中的源码而设计的。下面...

    java 并发学习总结

    3. **同步工具类**:Java并发包`java.util.concurrent`中的工具类,如`Semaphore`(信号量)、`CyclicBarrier`(回环栅栏)、`CountDownLatch`(倒计时器)和`FutureTask`(未来任务)等,提供了更灵活的线程同步和...

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

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

    concurrent.rar

    Java并发包,也被称为`java.concurrent`包,是Java编程语言中处理多线程和并发操作的核心工具包。它提供了一系列高效、线程安全的类和接口,使得开发者能够更安全、更容易地编写多线程应用程序。这个压缩包`...

    concurrent programming in java(doug lea)

    《Java并发编程》一书是由著名并发编程专家Doug Lea所著,他同时也是Java并发包(JUC)的作者,这本书详细介绍了Java多线程编程的基础概念和高级技术。 首先,书中提到了并发编程的基本概念,包括并发模型、设计力...

    JUC2019.6V1.5.zip

    首先我们知道,JUC就是java.util.concurrent包,俗称java并发包,那首先我们要知道java并发包是用来干嘛 的,然后要知道java并发包包括哪些知识点,这些知识点在平常中有哪些重要的运用,简单来说,这个学习 方法...

    java-core:JAVA集合包,线程池,并发包,NIO等API及链接相关学习

    这个名为"java-core"的资源集重点关注了几个关键领域:集合框架、多线程、线程池、并发包以及非阻塞I/O(NIO)。让我们逐一深入探讨这些主题。 1. **Java集合框架**: Java集合框架是处理对象集合的一组接口和类,...

    java_high_concurrent_wwj.rar

    3. **线程安全的数据结构**:Java并发包`java.util.concurrent`中提供了线程安全的数据结构,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,它们在并发场景下具有高效性能。 4. **并发工具类**:`...

    JavaConcurrency:这是一个用于Java并发包的学习程序

    Java并发包(java.util.concurrent)提供了一系列的类和接口,旨在简化多线程环境下的编程,提高应用程序的性能和可伸缩性。 首先,我们要了解Java中的线程。线程是程序执行的最小单元,一个进程可以有多个线程同时...

    Java最新学习路线.docx分享给需要的同学

    1. 多线程和并发编程:学习使用Java并发包(如java.util.concurrent)处理多线程编程,了解线程池、锁机制和并发集合等。 2. 性能优化:学习分析和调优Java应用程序的性能,了解内存管理、垃圾回收、性能监测和调优...

    学习java必看

    11. **Java标准库**:深入学习Java的标准库,如util包中的各种工具类,lang包中的基础类,以及并发包(concurrent)中的并发工具。 12. **框架与库**:学习流行的Java框架如Spring、Hibernate、MyBatis等,以及如何...

    natural-selection-simulation:使用Java并发包的自然选择模拟

    在本项目"natural-selection-simulation"中,开发者使用Java编程语言,特别是其并发包(java.util.concurrent)来实现这一模拟。Java并发包提供了丰富的工具和接口,使得多线程编程更加高效和可控,对于处理大规模...

    java语言学习六大要点

    此外,熟悉Java并发包(java.util.concurrent)中的工具类,能帮助简化多线程编程。 6. 了解网络编程: 虽然大多数开发者不会直接编写底层网络程序,但理解网络编程的基本原理,如TCP/IP协议、套接字(Socket)通信...

    深入学习:Java多线程编程

    4. **并发工具类**:Java的并发包(java.util.concurrent)包含许多高效并发工具,如CountDownLatch、CyclicBarrier、Future和Callable,它们在多线程编程中扮演重要角色。 5. **并发集合**:线程安全的集合类,如...

    接触并学习高并发。后台框架采用SSM,前台框架采用bootstrap,数据库采用mysql,项目管理工具maven,.zip

    同时,熟悉Java的并发包java.util.concurrent,了解ExecutorService、Semaphore、CountDownLatch、CyclicBarrier等工具类,它们在并发编程中扮演着重要角色。 除此之外,分布式系统概念、负载均衡、集群、微服务...

    Java 2全方位学习

    书中会讲解线程的创建、同步机制(如synchronized关键字、wait/notify机制)、死锁问题,以及Java并发包(java.util.concurrent)中的高级工具,如ExecutorService和Future,帮助开发者构建多线程程序并确保其正确性...

    Concurrent-MultiThread-Async:多线程的使用,concurrent包的使用,并发队列的时候,@ Async方法返回值的异步处理,

    在Java编程中,多线程和并发处理是提高应用程序性能的关键技术。`Concurrent-MultiThread-Async` 主题涉及到如何有效地...通过学习并实践`Concurrent-MultiThread-Async-master`项目,你可以深入了解并应用这些技术。

    Java 多线程学习总结6

    Java并发包`java.util.concurrent`提供了许多高级并发工具,如`Semaphore`(信号量)、`CountDownLatch`(倒计时器)、`CyclicBarrier`(循环栅栏)和`Future`(异步计算结果)。这些工具帮助开发者更高效地控制并发...

Global site tag (gtag.js) - Google Analytics