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();