Java NIO中,缓冲区是多线程共享还是每个线程都有自己的缓冲区?

如题,buffer是NIO中比较重要的概念,实际程序运行过程中,是在每个线程中创建buffer,还是创建一份buffer,多个线程共享?
如果是每个线程创建自己的buffer,可以理解;如果是多个线程共享一个buffer,那么如何确保数据读写的安全与同步的?

NIO本来就是复用了多个连接,一个线程中可以处理大量的数据读写。所以最好还是一个线程一个buffer,这样可以避免多个线程之间的冲突

/*Allocates a new byte buffer......*/
// 所以每个线程创建一个buffer
public static ByteBuffer allocate(int capacity) {
if (capacity < 0)
throw new IllegalArgumentException();
return new HeapByteBuffer(capacity, capacity);
}