java concurrent 包_java NIO和Concurrent包的一些知识点

1. NIO

ByteBuffer缓存

ByteBuffer.allocate();

put() 写数据

get() 读数据

limit()  得到limit

position() 得到position

capicity() 得到capicity

remaining() limit-position

hasRemaining()   limit-position>0?true:false

rewind()将position置为0

reset()将position重置为 mark()上次的位置

mark()

clear()清空缓冲区,并不是真正的缓冲区,修改buffer的相应的参数

Channel通道

2.java.util.concurrent

1.BlockingQuene (ArrayListBlockingQueue,LinkedBlockingQueue)阻塞队列 存放线程处理的数据

2.ConcurrentMap

锁的范围更加小不是整个map 而是部分

引入了读写锁的机制

3.CountDownLatch 闭锁  。是concurrent提供的包,可以协调线程执行的过程,

实现协调某个线程阻塞知道其他若干线程达到一定条件才放开阻塞执行的效果

使用  等待时间调用  CountDownLatch.await(), 其他先要完成的线程调用 CountDownLatch.countDown()

4.CyclicBarrier 栅栏

可以实现多个并发的线程在执行过程中,在某一个节点进行阻塞等待,直到所有的线程

都到达指定的位置后,才一起发开阻塞继续执行

构造函数初始化要等待线程的个数,然后调用CyclicBarrier.await()

5.Exchanger 交换机

可以实现连个线程交换对象,先到的线程会出现阻塞,直到两个线程到达交换机后,

互相交换对象,各自继续执行

6.Semaphore 信号量

构造函数Semaphore(int)  Semaphore(int,boolean) 不公平策略

主要函数 acquire(); 后的信号量,无则阻塞,release()释放信号信号量

7.ExecuteService 线程池

Executors.newFixedThreadPool()

Executors.newCachedThreadpool()

Executors.newSingletonThreadPool()

Executors.newScheduledThreadPool()

线程池

1.ExecutorService

提交线程的方法

execute() 提交线程 没有返回值

submit(Runnable) 提交线程,返回Future 可以通过Future.get()得到该线程的状态,

但是如果该线程未执行完成,那么该方法阻塞

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

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

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

关闭线程池:ExecutorService.shutdown();该方法不再接受线程池,等待所有线程

执行完毕后,线程池结束。

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

2.ReadWriteLock 读写锁

读锁可以共享,写锁互斥

读锁 readLock().lock();

写锁 writeLock().lock();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值