并发编程,目前软件开发不可规避的一个问题,在此我先和大家分享下如何使用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并发之并发工具类,并发工具类有很多,这里主要介绍了CyclicBarrier、CountDownLatch、Semaphore、Exchanger
06、JUC并发工具类在大厂的应用场景详解_ev06、JUC并发工具类在大厂的应用场景详解_ev06、JUC并发工具类在大厂的应用场景详解_ev06、JUC并发工具类在大厂的应用场景详解_ev06、JUC并发工具类在大厂的应用场景详解_ev...
多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题。
高并发订单号生成工具类,TWITTER编码方式可BAIDU
一、总论:在JDK中提供了几种并发工具类 1)CountDownLatch(同步倒数计数器:等待多线程(或者多步骤)完成) 2)CyclicBarrier(循环屏障:同步屏障) 3)Semaphore(信号量:控制并发进程数) 主要参考...
java并发工具类(CountDownLatch+Semaphore+Exchanger);java并发工具类(CountDownLatch+Semaphore+Exchanger);java并发工具类(CountDownLatch+Semaphore+Exchanger);java并发工具类(CountDownLatch+...
并发工具类介绍_2
并发工具类介绍_3
并发工具类介绍_4
并发工具类介绍_5
并发工具类介绍_6
并发工具类介绍_7
并发工具类介绍_8
并发工具类介绍_(1)
CountDownLatch、Semaphore等4大并发工具类详解,并介绍了简单的适用场景。
在Java中并发协同工具类,以及场景的示例
笔记-2、线程的并发工具类2
这是一个库包含了Java并发库一些有用和智能工具类。
关于java中线程的一些基础知识详解文档和知识点,内容详细,通俗易懂,非常适合当接触线程知识的同学,以及复习线程理论知识人员
Java并发工具包java_util_concurrent_user_guide_cn。