`
xylong
  • 浏览: 191351 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

话说并发工具类

 
阅读更多

并发编程,目前软件开发不可规避的一个问题,在此我先和大家分享下如何使用java 提供的并发工具类,至于内部源码原理研究还需要大家自己好好学习了,且下面的示例也是借鉴了别人文章,个人感觉蛮好。

 

1、Semaphore(信号量) ,主要做一些阀值的控制

public class SemaphoreTest {
	
	/**
	 * 适合做一些资源控制,下面的示例演示了在高并发来获取资源执行任务时,最多值允许
	 * 10个线程来执行任务,所以适合在数据库连接池等场景使用,避免资源过度消耗
	 */
	private final static Semaphore permits = new Semaphore(10);
	public static void main(String[] args) {
		try {
			for (int i = 0 ; i < 100 ;i++) {
				new Thread(){
					public void run(){
						try {
							permits.acquire();
							System.out.println("获取了许可,执行任务!");
						} catch (InterruptedException e) {
							e.printStackTrace();
						}finally{
							//归还了许可证
							permits.release();
						}
					}
				}.start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 2、Exchanger(交换器)

  

public class ExchangerTest {
	public static void main(String []args) {
	        final Exchanger <Integer>exchanger = new Exchanger<Integer>();
	        for(int i = 0 ; i < 10 ; i++) {
	            final Integer num = i;
	            new Thread() {
	                public void run() {
	                    System.out.println("我是线程:Thread_" + this.getName() + "我的数据是:" + num);
	                    try {
	                        Integer exchangeNum = exchanger.exchange(num);
	                        Thread.sleep(1000);
	                        System.out.println("我是线程:Thread_" + this.getName() + "我原先的数据为:" + num + " , 交换后的数据为:" + exchangeNum);
	                    } catch (InterruptedException e) {
	                        e.printStackTrace();
	                    }
	                }
	            }.start();
	        }
	    }
}

   代码说明:

  可以看到,如果某个线程和另一个线程传送了数据,它接受到的数据必然是另一个线程传递给他的,中间步  骤由Exchanger去控制,其实你可以说,我自己随机取选择,不过中间的算法逻辑就要复杂一些了

 

     下面还有几种工具类需要介绍,稍后会完善过来。

 

分享到:
评论

相关推荐

    java并发之并发工具类

    Java 并发工具类详解 Java 并发工具类是 Java 并发编程中的一种重要工具,用于协调线程之间的并发执行。 Java 并发工具类中有很多种,今天我们主要介绍四种:CyclicBarrier、CountDownLatch、Semaphore 和 ...

    java并发工具类

    Java并发工具类是Java平台提供的一系列用于处理多线程并发问题的类和接口,它们在`java.util.concurrent`包中。并发问题主要包括资源竞争、死锁、活锁以及饥饿等,合理使用并发工具可以有效地提高程序的并发性能并...

    06、JUC并发工具类在大厂的应用场景详解-ev

    06、JUC并发工具类在大厂的应用场景详解_ev06、JUC并发工具类在大厂的应用场景详解_ev06、JUC并发工具类在大厂的应用场景详解_ev06、JUC并发工具类在大厂的应用场景详解_ev06、JUC并发工具类在大厂的应用场景详解_ev...

    并发编程——并发工具类.pdf

    ### 并发编程——并发工具类 #### 知识点概述 并发编程是Java编程中的高级主题,主要目的是为了让程序能够充分利用多核CPU的优势,提高程序的执行效率。并发工具类则是Java中用于支持多线程协作和同步控制的一系列...

    CountDownLatch、Semaphore等4大并发工具类详解

    "Java 并发工具类详解" Java 并发工具类是 Java 并发编程的核心组件之一,提供了多种同步结构和并发容器,帮助开发者创建高效、可靠的并发程序。本文将详细介绍 Java 并发工具类的四大类:CountDownLatch、...

    Java多线程之并发工具类

    Java并发工具类是Java多线程编程中必不可少的一部分,它们为开发者提供了更加高效和灵活的线程同步机制。本文将详细介绍三个重要的并发工具类:CountDownLatch、CyclicBarrier和Semaphore。 首先,CountDownLatch是...

    并发工具类介绍 2

    并发工具类介绍_2

    并发工具类介绍 3

    并发工具类介绍_3

    并发工具类介绍 4

    并发工具类介绍_4

    并发工具类介绍 5

    并发工具类介绍_5

    并发工具类介绍 6

    并发工具类介绍_6

    并发工具类介绍 7

    并发工具类介绍_7

    并发工具类介绍 8

    并发工具类介绍_8

    高并发订单号生成工具类

    高并发订单号生成工具类,TWITTER编码方式可BAIDU

    Java并发工具包

    九、并发工具类 包括 TimeUnit、ThreadLocalRandom 和 Phaser 等,这些工具类提供了在并发编程中常用的实用功能,如时间单位转换、随机数生成和同步阶段控制。 总结来说,Java并发工具包提供了丰富的工具和机制,...

    并发工具类介绍 (1)

    并发工具类介绍_(1)

    Java并发工具类示例

    本文将详细解析Java并发工具类,并通过示例代码介绍`CountDownLatch`、`CyclicBarrier`、`Phaser`、`Semaphore`和`ThreadLocal`的用法。 1. **CountDownLatch** `CountDownLatch`是一个计数器,通常用于等待多个...

    java并发工具类(CountDownLatch+Semaphore+Exchanger)

    Java并发工具类是Java并发编程中的重要组成部分,其中包括了多种实用的工具,如CountDownLatch、Semaphore和Exchanger,这些工具类极大地简化了多线程环境下的同步和协调问题。 1. **CountDownLatch**: ...

    6、JUC并发工具类在大厂的应用场景详解(1).pdf

    ### JUC并发工具类在大型企业的应用场景详解 #### 一、引言 随着现代软件系统对高并发处理能力的需求日益增长,如何有效地管理和控制多线程间的协作与竞争成为了一个重要课题。Java语言自1.5版本引入了`java.util....

    并发工具类及线程池1

    【并发工具类及线程池】是Java多线程编程中的重要组成部分,它们提供了一种高效、可控的方式来管理和协调并发任务。本节主要讨论的是CyclicBarrier,一个用于同步线程的工具类。 **CyclicBarrier简介** ...

Global site tag (gtag.js) - Google Analytics