ExecutorService executor = Executors.newCachedThreadPool();
ExecutorService executor2 = Executors.newFixedThreadPool();
ExecutorService executo3 = Executors.newSingleThreadExecutor();
SynchronousQueue和LinkedBlockingQueue是Java中两种不同类型的阻塞队列,它们在实现上有一些区别。
-
容量限制:SynchronousQueue是一个没有容量限制的阻塞队列,每个插入操作必须等待一个相应的删除操作,否则插入操作将被阻塞。而LinkedBlockingQueue是一个具有可选容量限制的阻塞队列,可以根据需要设置容量大小。
-
公平性:SynchronousQueue是一个非公平的队列,它不保证等待时间最长的线程优先获取元素。而LinkedBlockingQueue可以选择是公平的还是非公平的,通过构造函数可以指定是否按照FIFO顺序来获取元素。
-
数据结构:SynchronousQueue内部并没有实际的存储空间,它仅仅作为一个传递元素的通道。而LinkedBlockingQueue是基于链表的数据结构,用于存储元素。
-
线程阻塞行为:SynchronousQueue的插入和删除操作都是阻塞的,插入操作必须等待某个线程来获取元素,删除操作必须等待某个线程来插入元素。而LinkedBlockingQueue的插入操作可以选择是阻塞的还是非阻塞的,删除操作总是阻塞的。
选择使用SynchronousQueue还是LinkedBlockingQueue取决于应用程序的需求。如果需要传递元素并且希望进行同步,可以选择使用SynchronousQueue。如果需要一个有容量限制的阻塞队列,可以选择使用LinkedBlockingQueue,并根据具体需求决定是否需要公平性和阻塞行为。
标签:SynchronousQueue,元素,LinkedBlockingQueue,阻塞,插入,线程 From: https://www.cnblogs.com/zqlmianshi/p/17975031