前言:在你无聊的时候,想想比你优秀还努力的人,也许就不觉的无聊了

今天下午没事干把买的java并发编程艺术这本书拿出来看了看,看了下也记不住,还是好记性不如烂笔头,今天讲四个并发中可能会用到的工具类,分别是:

CountDownLatch

CyclicBarrier

Semaphore

Exchanger

CountDownLatch

countDownLatch允许一个或多个线程等待其他线程完成操作.比如说有三个线程分别是老二,老大,老爸,这三个线程必须是老二吃好了,老大吃,老大吃完了,老爸吃,在20年钱,农村家里穷,一般有好吃的都是先留个最小的,然后才给其他兄弟姐妹吃,都不吃了,才由我们的父母吃,所以父母都不容易了,为了儿女,虽然是多个线程但是确实线性的,

我同事面试别人就问过好几次这个问题,在java或者android中常用的有2个方式实现

第一种方式:

使用jdk中Thread自带的函数join实现,join()用于当前执行线程等待join线程执行结束,其实实现原理是不停检查join线程是否存活,如果join线程存活则让当前线程永远等待,其中,wait(0)表示永远等待下去,join在jdk中的是实现方式如下:

/**

* Waits for this thread to die.

*

*

An invocation of this method behaves in exactly the same

* way as the invocation

*

*

* {@linkplain #join(long) join}{@code (0)}

*

*

* @throws InterruptedException

* if any thread has interrupted the current thread. The

* interrupted status of the current thread is

* cleared when this exception is thrown.

*/

public final void join() throws InterruptedException {

join(0);

}直到join线程中止后,线程的this.notifyAll()方法会被调用,调用notifyAll()方法是在JVM里实现的,现在把上面的例子用代码实现下:

package com.thread;

public class RunnableJob {

public static void main(String[] args) throws InterruptedException {

Worker runnableJob = new Worker();

Thread t1 = new Thread(runnableJob, "老二");

Thread t2 = new Thread(runnableJob, "老大");

Thread t3 = new Thread(runnableJob, "老爸");

t1.start();

t1.join();

t2.start();

t2.join();

t3.start();

t3.join();

System.out.println("主线程执行完毕----");

}

}

class Worker implements Runnable{

public void run() {

Thread thread = Thread.currentThread();

try {

Thread.sleep(5000);

System.out.println(thread.getName()+"吃完了");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}log:

今天写不完,要下班,明天有时间写完

java中的并发类_java中并发常用工具类相关推荐

  1. 工具类系列---【金融常用工具类】

    工具类代码 import java.math.BigDecimal; import java.text.DecimalFormat;/*** 金融常用工具类*/ public class NumFor ...

  2. java生成验证码工具类_Java生成图形验证码工具类

    生成验证码效果 validatecode.java 验证码生成类 package cn.dsna.util.images; import java.awt.color; import java.awt ...

  3. java list排序工具类_java 之 Collections集合工具类排序

    数组有工具类Arrays,集合也有一个工具类Collections. sort方法: sort(List list):根据其元素natural ordering对制定的列表进行排序 sort(List ...

  4. md5 java 工具类_Java实现一个MD5工具类

    I. MD5工具类 利用JDK封装一个简易的MD5工具类,逻辑比较简单,直接贴下具体实现 public static String getMD5(String content) { String re ...

  5. 常用工具类 (一) : Apache Commons 常用工具类整理 (全)

    文章目录 一.commons-lang3 引入依赖 StringUtils 字符串工具类 StringEscapeUtils 转义字符串工具类 NumberUtils 数字工具类 ArrayUtils ...

  6. java http请求 工具类_Java 实现 Http 请求工具类

    1 packagecom.demo.util;2 3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io. ...

  7. java sqlserver工具类_Java连接sqlserver数据库工具类

    直接上代码web public class SqlUtils { private static final String DRIVERCLASS; private static final Strin ...

  8. java数组转换成string_java面试复习重点:类的管理及常用工具,教你抓住面试重点

    java复习: 类的管理及常用工具类 包 写在程序文件的第一行 一个Java 源文件中只能声明一个包, 且声明语句只能作为源文件的第一条指令 导入类能导入非public类,但是不能用因为在其他包缺省的 ...

  9. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  10. java常用工具类_java(二):工作中常用到的工具类

    工作中大家要用到很多工具类,第三方的jar中有很多现成的工具类符合自己的项目需要,这个时候就不需要去重复造轮子了,从而节省了很多时间,大家可以利用这些时间去做其它重要的事情,如果没有符合自己的工具类, ...

最新文章

  1. 软考解析:2015年上半年下午试卷
  2. C++实现邻接表存储的图及bfs遍历
  3. PHP方向+go+rpc+swoole,瞅瞅 PHP+Swoole 作为网络通信框架
  4. 来前端君朋友圈,一起聊前端面试技巧
  5. wpf 界面加载 Command
  6. 思维的碰撞|小博变换偶遇深度学习
  7. leetcode 两数之和 java版本
  8. Win10纯净版和官方原版哪个好?
  9. oracle x$bh 权限,关于Oracle的事务
  10. Photoshop-Camera Raw滤镜
  11. IE无法打开internet站点已终止操作
  12. Android一步步实现无痕埋点(3)-------虎躯一震
  13. linux shrink dev sd,Virt相关命令(转)
  14. 怎么把两个PDF文件合并一起
  15. Hive 编号函数
  16. 机器周期、振荡周期、时钟周期、状态周期???
  17. 用什么软件测试硬盘使用过多少次,硬盘能查看使用次数吗
  18. 关于软件测试的论文文库,软件测试毕业论文[共46页]
  19. java long string 转换_Java long 转成 String的实现
  20. 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介

热门文章

  1. machine learning for hacker记录(4) 智能邮箱(排序学习推荐系统)
  2. 基于Passthru的NDIS开发的个人理解
  3. svn在linux下的使用(svn命令行)ubuntu 删除 新增 添加 提交 状态查询 恢复
  4. 话说Python:非主流编程语言
  5. frontcon函数用不了_C++复制构造函数与析构函数
  6. c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题
  7. 环形队列出队的元素怎么输出出来_队列的知识讲解与基本实现(数据结构)
  8. 服务器宕机自动dns,有哪些同时支持智能解析和宕机自动切换的DNS服务?
  9. c语言 如何连接两个程序,C语言连接两个链表程序
  10. 人工智能和计算机软件,人工智能在计算机软件方面有什么应用?