JAVA并发-线程协作
这段时间有点忙,技术博客更新的比较少,今天更新一下相关并发的常用线程协作的类吧。
ExecutorService
线程池,用于创造和复用线程,他有几种模式。
我举一个自定义线程池数量的例子如下
ExecutorService service = Executors.newFixedThreadPool();
CountDownLatch
主要用于通知等待线程什么时候能够开始运作。CountDownLatch 一般作为一个线程的内部变量并且通过构造函数传入
在线程内某时间结束后,调用countdown方法就会自动-1,当countdown计数器为0时,等待的线程就能继续运作了
ExecutorService service = Executors.newFixedThreadPool();
CountDownLatch end = new CountDownLatch();
service.submit(new ThreadA( end ))
end.await();
CyclicBarrier
一般用于设置线程的一个集合点,使用方式同CountDownLatch方法,区别在于这个类的await需要线程等待内部计数器完全结束至0后才会继续工作。
当线程池内的线程较少时,则可能容易死锁。此外次计数器在线程内部可重复使用
CyclicBarrier barrier = new CyclicBarrier(10);
barrier.await();
Semaphore
一般用于设置排队机制,多线程协作时某个方法最多进入X个线程。用法与之前的相似,设置一个最大限制值,但在完成操作后需要手动进行释放。
Semaphore semaphore = new Semaphore();
semaphore.acquire();
semaphore.release();
Future
此方法用于异步处理一些复杂的操作,直接上例子吧 通过实现Callable接口的call方法进行包装,异步进行处理,然后通过future的get方法进行回调。
public class TestForThread { public int getRes(){
try {
Thread.sleep(*);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ;
} @Test
public void fultrueTest() throws InterruptedException, ExecutionException {
ExecutorService service = Executors.newFixedThreadPool();
CountDownLatch end = new CountDownLatch();
Semaphore semaphore = new Semaphore();
Future<Integer> f = service.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
return new TestForThread().getRes();
}
}); System.out.println("keep on ");
System.out.println("get callable data");
int a;
try {
a = f.get(, TimeUnit.SECONDS);
System.out.println(a);
} catch (TimeoutException e) {
// TODO Auto-generated catch block
System.out.println("timeout");
}
System.out.println("end");
end.await();
} }
Exchanger
这个用于线程之间的交换,比如一个线程读一个线程写,这个类我想了一下可能是为了节省一个Map的空间吧。不需要通过新建一个Map来存放临时数据。
具体事例不给啦,查API很简单的。(主要是我记不住 - -)
JAVA并发-线程协作的更多相关文章
- Java并发--线程间协作的两种方式:wait、notify、notifyAll和Condition
在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界 ...
- Java 并发 线程同步
Java 并发 线程同步 @author ixenos 同步 1.异步线程本身包含了执行时需要的数据和方法,不需要外部提供的资源和方法,在执行时也不关心与其并发执行的其他线程的状态和行为 2.然而,大 ...
- Java 并发 线程的优先级
Java 并发 线程的优先级 @author ixenos 低优先级线程的执行时刻 1.在任意时刻,当有多个线程处于可运行状态时,运行系统总是挑选一个优先级最高的线程执行,只有当线程停止.退出或者由于 ...
- Java 并发 线程属性
Java 并发 线程属性 @author ixenos 线程优先级 1.每当线程调度器有机会选择新线程时,首先选择具有较高优先级的线程 2.默认情况下,一个线程继承它的父线程的优先级 当在一个运行的线 ...
- Java 并发 线程的生命周期
Java 并发 线程的生命周期 @author ixenos 线程的生命周期 线程状态: a) New 新建 b) Runnable 可运行 c) Running 运行 (调用 ...
- 从JDK源码角度看java并发线程的中断
线程的定义给我们提供了并发执行多个任务的方式,大多数情况下我们会让每个任务都自行执行结束,这样能保证事务的一致性,但是有时我们希望在任务执行中取消任务,使线程停止.在java中要让线程安全.快速.可靠 ...
- Java并发——线程间的等待与通知
前言: 前面讲完了一些并发编程的原理,现在我们要来学习的是线程之间的协作.通俗来说就是,当前线程在某个条件下需要等待,不需要使用太多系统资源.在某个条件下我们需要去唤醒它,分配给它一定的系统资源,让它 ...
- Java并发——线程安全、线程同步、线程通信
线程安全 进程间"共享"对象 多个“写”线程同时访问对象. 例:Timer实例的num成员,即add()方法是用的次数.即Timer实例是资源对象. class TestSync ...
- Java并发——线程介绍
前言: 互联网时代已经发展到了现在.从以前只考虑小流量到现在不得不去考虑高并发的问题.扯到了高并发的问题就要扯到线程的问题.你是否问过自己,你真正了解线程吗?还是你只知道一些其他博客里写的使用方法.下 ...
随机推荐
- Linux(三) - 文件操作相关命令
Ctl-A 光标移动到行首 Ctl-C 终止命令 Ctl-D 注销登录 Ctl-E 光标移动到行尾 Ctl-U 删除光标到行首的所有字符,在某些设置下,删除全行 Ctl-W 删除当前光标到前边的最近一 ...
- npm包发布过程
在上一章节中,我封装了一个基于react的树状组件,后来想把它发布到npm上,下面主要介绍一下发布过程中遇到的问题: 1.去注册npm账号,注册地址(https://www.npmjs.com), 再 ...
- BOM编程
1 BOM编程 1.1 入门 BOM就是浏览器对象模型编程,通过javascript引擎提供的四个浏览器对象,操作浏览器,这叫BOM编程 1.2 window对象(重点) window代表的是一个窗口 ...
- CUDA memory
原文链接 CUDA存储器类型: 每个线程拥有自己的register and loacal memory; 每个线程块拥有一块shared memory; 所有线程都可以访问global memory; ...
- 第16章 STM32中断应用概览—零死角玩转STM32-F429系列
第16章 STM32中断应用概览 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- C# break语句
一.C# break语句 break语句用于终止它后面的所有循环语句,使控制流程跳转到break语句所在层的外面,以便结束本层的所有循环.如果有多个循环语句进行嵌套,break语句则会跳到它所在层的外 ...
- 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)
转载请标明出处: https://www.fangzhipeng.com/springcloud/2017/07/12/sc03-feign/ 本文出自方志朋的博客 最新Finchley版本请访问: ...
- Apache.Tomcat 调用Servlet原理之Class类的反射机制,用orc类解释
有一个兽人类 package com.swift.servlet; public class OrcDemo { private int hp; private int mp; private int ...
- Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库
Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库 文档 https://phonycode.github.io/wuss-weapp 扫码体验 使用微信扫一扫体验小程序组 ...
- LeetCode706. Design HashMap
题目 不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对.如果键对应的值已经存在,更新这个值. get ...