iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >day1 java concurrent包一些知识点
  • 589
分享到

day1 java concurrent包一些知识点

2023-06-02 21:06:09 589人浏览 安东尼
摘要

Concurrent: BlockingQueue(阻塞队列)ArrayBlockingQueue(指定容量,不可变),LinkeBlocingQueue(指定容量不可变,也可以不指定容量,默认Integer.Max_value)


Concurrent:

 BlockingQueue(阻塞队列)

ArrayBlockingQueue(指定容量,不可变),LinkeBlocingQueue(指定容量不可变,也可以不指定容量,默认Integer.Max_value)

PriorityBlockingQueue(根据实现的接口自定义排序,只有在逐个拿取的时候才有序)

SynchronousQueue(长度以1只能为1) 

 day1 java concurrent包一些知识点

 

 ConcurrentMap

ConcurrentHashMap 

   1.5 分桶加,1.8 CAS+红黑树来保证线程安全

ConcurrentNavigableMap(针对有序列表,有map.headMap map.subMap map.tailMap ,  返回有序的在取出范围的map)

 CountDownLatch 闭锁

CountDownLatch 以一个给定的数量初始化。 countDown() 每被调用一次,这一数 量就减一。通过调用 await() 方法之一,线程可以阻塞等待这一数量到达零。

等待一定数量的线程完成。来执行其后的程序

 CyclicBarrier 栅栏

它能够对处理一些算法的线程实现同
步。换句话讲,它就是一个所有线程必须等待的一个栅栏,直到所有线程都到达这 里,然后所有线程才可以继续做其他事情 

 Exchanger 交换机 

类表示一种两个线程可以进行互相交换对象的会和点 ,只能两个线程之间交换数据

 day1 java concurrent包一些知识点

 

 

 Semaphore 信号量

l acquire()
l release()
计数信号量由一个指定数量的 "许可" 初始化。每调用一次 acquire(),一个许可会 被调用线程取走。每调用一次 release(),一个许可会被返还给信号量。因此,在没 有任何 release() 调用时,最多有 N 个线程能够通过 acquire() 方法, N 是该信 号量初始化时的许可的指定数量。

线程池

 ExecutorService

(executors.newFixedThreadPool,长任务场景,只有核心线程,没有临时线程,容纳无限多

,newCachedThreadPool(高并发短任务场景,没有核心线程,全部都是临时线程,处理任意多的线程)

,newSingleThreadPool

,newSchedulerThreadPool(有核心线程,有临时线程)

)

提交线程的方法

execute() 提交线程 没有返回值submit(Runnable) 提交线程,返Future 可以通过Future.get()得到该线程的状态但是如果该线程未执行完成,那么该方法阻塞

submit(Callable) 同上面类似,但是线程可以带有返回值

invokeAny(.....),随机选择线程执行一个

invokeAll(),自动执行所有的线程

关闭线程池:ExecutorService.shutdown();该方法不再接受线程池,等待所有线程执行完毕后,线程池结束。

ExecutorService.shutdown();立即关闭,退出任务,正在执行的线程可能会出错。

##Callable只能用线程池提交

Callable runnable :

 返回值

 异常,runnabel没有容错机制,callable有容错机制,可以将 异常抛给上层处理

 Callable只能通过submit方法提交,runnable可以new 也可 以通过线程池提交

 ReadWriteLock 读写锁,可以是公平,也可以是非公平的。该锁可以跨方法

   读锁可以共享,写锁互斥

   读锁 readLock().lock();

   写锁 writeLock().lock(); 

package hgs.test;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.ConcurrentNavigableMap;import java.util.concurrent.ConcurrentSkipListMap;import java.util.concurrent.CountDownLatch;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.PriorityBlockingQueue;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.Semaphore;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReentrantReadWriteLock;public class Test {public static void main(String[] args) throws InterruptedException, BrokenBarrierException {//ConcurrentMap//BlockingQueue<String> bq = new ArrayBlockingQueue<String>(4);//add(超过长度会报错) remove(没有元素会报错)//offer(如果可以插入返回true 否则 false) poll(如果没有元素返回null)//bq.offer("1");//bq.offer("1");//bq.offer("1");//bq.offer("1");//bq.offer("1");//String flag = bq.poll();//System.out.println(flag);//put take 阻塞式//bq.put("1");//bq.put("1");//bq.put("1");//bq.put("1");//bq.put("1");//bq.put("1");//bq.take();//offer(o,timeout,timeunit),poll(timeout,tameunit)  等待timeout时间,然后跳过//bq.poll(10, TimeUnit.SECONDS);//bq.element();//检查是否为空,是的话跑出异常//bq.peek();//阻塞//闭锁//栅栏//exchanger交换器//6.Semaphore 信号量//原始创建线程池,executors.newCacheThreadPool 的底层调用该方法//可重入锁 ReentrantLock  可重入读写锁ReentrantReadWriteLockReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();for (int i = 0 ;i<3;i++) {new WriteLockTest( rwLock ).start();} }}class WriteLockTest extends Thread{ReentrantReadWriteLock rwLock ;public WriteLockTest(ReentrantReadWriteLock rwLock ) {this.rwLock = rwLock;}@Overridepublic void run() {rwLock.writeLock().lock();System.out.println("reading......");try {Thread.sleep((long)(Math.random()*2000));} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("done......");rwLock.writeLock().unlock();}}class ReadLockTest extends Thread{ReentrantReadWriteLock rwLock ;public ReadLockTest(ReentrantReadWriteLock rwLock ) {this.rwLock = rwLock;}@Overridepublic void run() {rwLock.readLock().lock();System.out.println("reading......");try {Thread.sleep((long)(Math.random()*2000));} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("done......");rwLock.readLock().unlock();}}class ThreadPoolTest implements Runnable{ThreadPoolTest (){}@Overridepublic void run() { System.out.println(Thread.currentThread().getName()); try {Thread.sleep((long)(Math.random()*2000));} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}class SemaphoreTest extends Thread{Semaphore s = null;public SemaphoreTest(Semaphore s) {this.s = s;}@Overridepublic void run() {try {s.acquire();System.out.println("aquire......");Thread.sleep((long)(Math.random()*3000));} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("release......");s.release();}}class ExchangerTest implements Runnable{Exchanger<String> ex = null;public ExchangerTest(Exchanger<String> ex) {this.ex = ex;}@Overridepublic void run() {String my = Thread.currentThread().getName();String exstr = null;try {exstr = ex.exchange(my);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(my+"   "+exstr);}}class BoyRun implements Runnable{CountDownLatch cdl ;public BoyRun(CountDownLatch cdl ) {this.cdl = cdl;}@Overridepublic void run() {System.out.println("cdl"+" +1");cdl.countDown();System.out.println("cdl"+" +1--");}}class GirlRan implements Runnable {CyclicBarrier  cb ;public GirlRan(CyclicBarrier  cb ) {this.cb = cb;}@Overridepublic void run() {System.out.println("cdl"+" +1");try {Thread.sleep((long)(Math.random()*5000));cb.await();} catch (InterruptedException | BrokenBarrierException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("cdl"+" +1--");}}class Boy implements Comparable<Boy>{String name;int age;public Boy(String name ,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int compareTo(Boy o) {return this.age - o.age;}@Overridepublic String toString() {return "Boy [name=" + name + ", age=" + age + "]";}}

--结束END--

本文标题: day1 java concurrent包一些知识点

本文链接: https://www.lsjlt.com/news/231335.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • day1 java concurrent包一些知识点
    Concurrent: BlockingQueue(阻塞队列)ArrayBlockingQueue(指定容量,不可变),LinkeBlocingQueue(指定容量不可变,也可以不指定容量,默认Integer.Max_value)...
    99+
    2023-06-02
  • java URL知识点有哪些
    本篇内容主要讲解“java URL知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java URL知识点有哪些”吧!01、什么是 URL为了搞清楚什么是 URL,需要引入另外两个概念 ...
    99+
    2023-06-19
  • Java Unsafe知识点有哪些
    本篇内容介绍了“Java Unsafe知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!sun.misc.Unsafe作用:可以用来...
    99+
    2023-06-25
  • Java泛型知识点有哪些
    本篇内容介绍了“Java泛型知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一 什么是泛型Java 泛型(generi...
    99+
    2023-06-15
  • Java并发知识点有哪些
    本篇内容主要讲解“Java并发知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java并发知识点有哪些”吧!1.并行跟并发有什么区别?从操作系统的角度来看,线程是CPU分配的最小单位。...
    99+
    2023-06-29
  • Java多态知识点有哪些
    本篇内容主要讲解“Java多态知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多态知识点有哪些”吧!将某个对象的引用视为其基类对象的引用的做法被称作“向上转型”(upcasti...
    99+
    2023-06-03
  • Java基础知识点有哪些
    这篇文章主要介绍“Java基础知识点有哪些”,在日常操作中,相信很多人在Java基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java基础知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-02
  • java中Supplier知识点有哪些
    小编给大家分享一下java中Supplier知识点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、说明这个接口是提供者的意思,只有一个抽象的get,没有默认的方法和静态的方法,导入一个泛T,get方法,返回一个泛T...
    99+
    2023-06-14
  • Java后端知识点有哪些
    本篇内容主要讲解“Java后端知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java后端知识点有哪些”吧!基础知识数据结构基本的数据结构是非常重要的,无论接触什么编程语言,这些基本数...
    99+
    2023-06-16
  • Java NIO的知识点有哪些
    今天小编给大家分享一下Java NIO的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。No-Block 和Blo...
    99+
    2023-06-17
  • Java栈的知识点有哪些
    这篇文章主要介绍了Java栈的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java栈的知识点有哪些文章都会有所收获,下面我们一起来看看吧。1.栈的概念栈(stack)又名堆栈,作为一种数据结构,是...
    99+
    2023-06-29
  • java的Classpath知识点有哪些
    本篇内容主要讲解“java的Classpath知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java的Classpath知识点有哪些”吧!java的优点就是他是一个自动支持网络功能的...
    99+
    2023-06-03
  • Java的Queue知识点有哪些
    本篇内容主要讲解“Java的Queue知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的Queue知识点有哪些”吧!Java提供了Quere,相当好用,在1.5版本中又有增强。...
    99+
    2023-06-03
  • java有哪些重要知识点
    本篇内容介绍了“java有哪些重要知识点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JDK JRE JVMJDK:Java标准开发包,它提...
    99+
    2023-06-20
  • Java数组知识点有哪些
    这篇文章主要介绍“Java数组知识点有哪些”,在日常操作中,相信很多人在Java数组知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数组知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-30
  • Java继承的知识点有哪些
    今天小编给大家分享一下Java继承的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。继承继承的介绍继承是java面...
    99+
    2023-06-29
  • 关于包导入的知识点有哪些
    本篇内容主要讲解“关于包导入的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“关于包导入的知识点有哪些”吧! 1. 使用 __all__ 控...
    99+
    2024-04-02
  • Java复用类知识点有哪些
    本篇内容介绍了“Java复用类知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!组合,用于在新类中使用现有类的功能,而并非它的接口,...
    99+
    2023-06-03
  • Java的技术知识点有哪些
    本篇文章为大家展示了Java的技术知识点有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。数据库篇JDBC连接数据库步骤(以MYSQL为例)加载JDBC驱动程序:   通过Cl...
    99+
    2023-06-02
  • java中锁的知识点有哪些
    今天小编给大家分享一下java中锁的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。乐观锁和悲观锁悲观锁悲观锁对应...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作