在jdk 的API中提供了一个字符串的阻塞队列 : class BoundedBuffer { final Lock lock = new ReentrantLock(); final Condition notFull = lock.newCondition(); final Condition notEmpty = lock.newCondition(); final Object[] items = new Object[100]; int putptr, takeptr, count;
自己实现阻塞队列的话可以采用Object下的wait和notify方法,也可以使用Lock锁提供的Condition来实现,本文就是自己手撸的一个简单的阻塞队列,部分借鉴了JDK的源码.Ps:最近看面经的时候发现字节跳动的面试官特别喜欢让面试者手写阻塞队列,希望本文能对大家有帮助.个人手撸如有错误还请批评指正. public class AxinBlockQueue { //队列容器 private List<Integer> container = new ArrayList<>
前言 从之前的阻塞队列的源码分析中,我们知道,JDK 中的阻塞队列是使用 ReentrantLock 和 Condition 实现了,我们今天来个简易版的.代码如下: 代码 public class BoundedBuffer { final ReentrantLock lock = new ReentrantLock(); final ConditionObject notFull = (ConditionObject) lock.newCondition(); final Condition
synchronized死锁 package com.thread.demo.deadlock; public class DeadLock { private static Object lock1 = new Object(); private static Object lock2 = new Object(); public static void main(String[] args) { // 创建线程1 new Thread(new Runnable() { @Override p
样本说明: tensorflow经典实例之手写数字识别.MNIST数据集. 数据集dir名称 每个文件夹代表一个标签label,每个label中有820个手写数字的图片 标签label为0的文件夹中部分bmp图片示例 import tensorflow as tf import os from matplotlib import pyplot as plt import numpy as np from sklearn.utils import shuffle 相关模块 def load_s