成品人和精品人的区别在哪里百度seo新算法
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:31
当前位置: 首页 > news >正文
成品人和精品人的区别在哪里,百度seo新算法,企点qq售卖平台,网站推广营销技巧目录
一.ConcurrentHashMap
1.为什么要使用ConcurrentHashMap#xff1f;
2.ConcurrentHashMap的类图
3.ConcurrentHashMap的结构图
二.阻塞队列
Java中的7个阻塞队列
ArrayBlockingQueue#xff1a;一个由数组结构组成的有界阻塞队列。
LinkedBlockingQueue#xf…目录
一.ConcurrentHashMap
1.为什么要使用ConcurrentHashMap
2.ConcurrentHashMap的类图
3.ConcurrentHashMap的结构图
二.阻塞队列
Java中的7个阻塞队列
ArrayBlockingQueue一个由数组结构组成的有界阻塞队列。
LinkedBlockingQueue一个由链表结构组成的有界阻塞队列。可以指定容量也可以无界。
PriorityBlockingQueue一个支持优先级排序的无界阻塞队列。
DelayQueue一个使用优先级队列实现的无界阻塞队列。 用于按照指定延迟时间对元素进行排序的阻塞队列。
SynchronousQueue一个不存储元素的阻塞队列。常用于线程间的手递手传递。
LinkedBlockingDeque一个由链表结构组成的双向阻塞队列。 一.ConcurrentHashMap
1.为什么要使用ConcurrentHashMap 不安全的HashMap Java 中的 HashMap 是非线程安全的这意味着如果多个线程同时访问和修改同一个 HashMap 实例可能会导致不一致的结果或抛出异常。以下是一个示例代码展示了 HashMap 的线程不安全行为
public static void main(String[] args) {// 创建一个 HashMapMapInteger, String map new HashMap();// 创建一个线程池ExecutorService executorService Executors.newFixedThreadPool(2);// 向 HashMap 中添加键值对的任务Runnable task () - {for (int i 0; i 1000; i) {map.put(i, Value i);}};// 启动两个线程同时执行添加任务executorService.submit(task);executorService.submit(task);// 等待线程池执行完毕executorService.shutdown();// 等待一段时间以确保线程池完成try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}// 输出 HashMap 的大小System.out.println(HashMap size: map.size());}
在上述示例中我们创建了一个包含两个线程的线程池并让它们同时向同一个 HashMap 实例中添加键值对。由于 HashMap 不是线程安全的这样的并发写入操作可能导致不一致的结果。在某些情况下可能会抛出 ConcurrentModificationException 异常。 效率低下的HashTable HashTable容器使用synchronized来保证线程安全但在线程竞争激烈的情况下HashTable 的效率非常低下。因为当一个线程访问HashTable的同步方法其他线程也访问HashTable的同 步方法时会进入阻塞或轮询状态。如线程1使用put进行元素添加线程2不但不能使用put方 法添加元素也不能使用get方法来获取元素所以竞争越激烈效率越低。 ConcurrentHashMap的锁分段技术可有效提升并发访问率 HashTable容器在竞争激烈的并发环境下表现出效率低下的原因是所有访问HashTable的 线程都必须竞争同一把锁。 ConcurrentHashMap所使用的锁分段技术。首先将数据分成一段一段地存 储然后给每一段数据配一把锁当一个线程占用锁访问其中一个段数据的时候其他段的数据也能被其他线程访问。
2.ConcurrentHashMap的类图 3.ConcurrentHashMap的结构图 二.阻塞队列
阻塞队列BlockingQueue是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。 支持阻塞的插入方法当队列满时会阻塞插入元素的线程直到队列不满。 支持阻塞的移除方法当队列为空时获取元素的线程会等待队列变为非空。
阻塞队列常用于生产者和消费者场景。生产者就是添加元素的线程消费者就是获取元素的线程阻塞队列就是生产者存放元素、消费者获取元素的容器。插入和移除操作的4中处理方式
方法/处理方式抛出异常返回特殊值一直阻塞超时退出插入方法add(e)offer(e)put(e)offer(e,time,unit)移除方法remove()poll()take()poll(time,unit)检查方法element()peek()不可用不可用 抛出异常当队列满了再插入元素时会抛出IllegalStateException“Queue full”异常。当队列为空再获取元素会抛出NoSuchElementException异常。 返回特殊值当队列插入元素时会返回元素是否插入成功成功返回true。如果是移除方法则是从队列去除元素如果不存在则返回null。 一直阻塞当队列满时往队列put元素队列会一直阻塞添加元素的线程知道队列可用或者响应中断退出。当队列为空时如果从队列中take元素队列会阻塞获取元素的线程知道队列不为空。 超时退出当队列满时如果插入元素队列会阻塞插入元素的线程一段时间超过了指定时间线程就会退出。
Java中的7个阻塞队列
如果是无界阻塞队列队列不可能会出现满的情况所以使用put或offer方法永 远不会被阻塞而且使用offer方法时该方法永远返回true。 ArrayBlockingQueue一个由数组结构组成的有界阻塞队列。 public class ArrayBlockingQueueExample {public static void main(String[] args) throws InterruptedException {ArrayBlockingQueueInteger arrayBlockingQueue new ArrayBlockingQueue(5);
// 生产者Thread produce new Thread(()-{try {for (int i 0; i 10; i) {arrayBlockingQueue.put(i);System.out.println(produced: i);}} catch (InterruptedException e) {e.printStackTrace();}});
// 消费者Thread consume new Thread(()-{try {while (true) {int i arrayBlockingQueue.take();System.out.println(consumed i);}} catch (InterruptedException e) {e.printStackTrace();}});
produce.start();consume.start();
Thread.sleep(2000);produce.interrupt();consume.interrupt();}
} LinkedBlockingQueue一个由链表结构组成的有界阻塞队列。可以指定容量也可以无界。 public class LinkedBlockingQueueExample {public static void main(String[] args) throws InterruptedException {LinkedBlockingQueueInteger queue new LinkedBlockingQueue(5);
// 同上创建生产者和消费者线程并启动
// 主线程等待中断生产者和消费者Thread.sleep(2000);produce.interrupt();consume.interrupt();}
} PriorityBlockingQueue一个支持优先级排序的无界阻塞队列。 public class PriorityBlockingQueueExample {public static void main(String[] args) throws InterruptedException {PriorityBlockingQueueInteger queue new PriorityBlockingQueue();
// 同上创建生产者和消费者线程并启动
// 主线程等待中断生产者和消费者Thread.sleep(2000);produce.interrupt();consume.interrupt();}
} DelayQueue一个使用优先级队列实现的无界阻塞队列。 用于按照指定延迟时间对元素进行排序的阻塞队列。 public class DelayQueueExample {public static void main(String[] args) throws InterruptedException {DelayQueueDelayedElement queue new DelayQueueDelayedElement ();
// 创建消费者线程Thread consume new Thread(() -{try {while (true) {DelayedElement element queue.take();System.out.println(consume: element.getValue());}} catch (InterruptedException e) {e.printStackTrace();}});consume.start();
// 生产者添加元素queue.put(new DelayedElement(value 5, 1, TimeUnit.SECONDS));queue.put(new DelayedElement(value 4, 2, TimeUnit.SECONDS));queue.put(new DelayedElement(value 3, 3, TimeUnit.SECONDS));queue.put(new DelayedElement(value 2, 4, TimeUnit.SECONDS));queue.put(new DelayedElement(value 1, 5, TimeUnit.SECONDS));
Thread.sleep(10000);
consume.interrupt();}
static class DelayedElement implements Delayed {private String value;private long delayTime;
public String getValue() {return value;}
public DelayedElement(String value, long delayTime, TimeUnit timeUnit) {this.value value;this.delayTime System.currentTimeMillis() timeUnit.toMillis(delayTime);}
Overridepublic long getDelay(TimeUnit unit) {return delayTime - System.currentTimeMillis();}
Overridepublic int compareTo(Delayed o) {return Long.compare(this.delayTime, ((DelayedElement) o).delayTime);}}
} SynchronousQueue一个不存储元素的阻塞队列。常用于线程间的手递手传递。 public class SynchronousQueueExample {public static void main(String[] args) throws InterruptedException {SynchronousQueueInteger queue new SynchronousQueue();// 同上创建生产者和消费者线程并启动
// 主线程等待中断生产者和消费者Thread.sleep(2000);produce.interrupt();consume.interrupt();}
} LinkedTransferQueue一个由链表结构组成的无界阻塞队列。 public class LinkedTransferQueueExample {public static void main(String[] args) throws InterruptedException {LinkedTransferQueueInteger queue new LinkedTransferQueue();
// 同上创建生产者和消费者线程并启动
// 主线程等待中断生产者和消费者Thread.sleep(2000);produce.interrupt();consume.interrupt();}
} LinkedBlockingDeque一个由链表结构组成的双向阻塞队列。 public class LinkedBlockingDequeExample {public static void main(String[] args) throws InterruptedException {LinkedBlockingDequeInteger deque new LinkedBlockingDeque();
// 同上创建生产者和消费者线程并启动
// 主线程等待中断生产者和消费者Thread.sleep(2000);produce.interrupt();consume.interrupt();}
}
- 上一篇: 成立做网站的公司有哪些wordpress建站详细教程视频
- 下一篇: 成品网站 售卖宣传册制作
相关文章
-
成立做网站的公司有哪些wordpress建站详细教程视频
成立做网站的公司有哪些wordpress建站详细教程视频
- 技术栈
- 2026年03月21日
-
成立网站长兴网站建设公司
成立网站长兴网站建设公司
- 技术栈
- 2026年03月21日
-
成立网站要多少钱傻瓜式在线做网站
成立网站要多少钱傻瓜式在线做网站
- 技术栈
- 2026年03月21日
-
成品网站 售卖宣传册制作
成品网站 售卖宣传册制作
- 技术栈
- 2026年03月21日
-
成品网站w灬源码伊甸院网络营销专业如何
成品网站w灬源码伊甸院网络营销专业如何
- 技术栈
- 2026年03月21日
-
成品网站货源1688在线深圳航空公司官方网站首页
成品网站货源1688在线深圳航空公司官方网站首页
- 技术栈
- 2026年03月21日






