package com.example.threaddemo.queue;
import java.util.Collection;
import java.util.Iterator;
import java.util.Queue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author 木木老师
* @create 2022/5/11 13:47
*/
public class MyBlockQueue implements Queue {
//头结点
private Node head;
//尾结点
private Node tail;
//当前节点数
private int num;
//队列最大节点数
private int size;
private final ReentrantLock addLock = new ReentrantLock();
private final Condition addLockCondition = addLock.newCondition();
private final Condition pollLockCondition = addLock.newCondition();
public MyBlockQueue(int size){
this.size = size;
}
public MyBlockQueue(){
this.size = 1000;
}
@Override
public int size() {
return this.size;
}
@Override
public boolean isEmpty() {
return this.num == 0;
}
public boolean isFull() {
return this.num == this.size;
}
@Override
public boolean contains(Object o) {
Node t = this.head;
if(t == null){
return false;
}else {
do{
if(o == t.getData()){
return true;
}
if(o.hashCode() == t.hashCode()){
return true;
}
}while ((t = t.getNext()) != null);
return false;
}
}
@Override
public Iterator iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public Object[] toArray(Object[] a) {
return new Object[0];
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection c) {
return false;
}
@Override
public boolean addAll(Collection c) {
return false;
}
@Override
public boolean removeAll(Collection c) {
return false;
}
@Override
public boolean retainAll(Collection c) {
return false;
}
@Override
public void clear() {
}
@Override
public boolean add(Object o) {
addLock.lock();
try {
if(isFull()){
System.out.println("队列已满,加不进去了。。。");
addLockCondition.await();
}
if(contains(o)){
throw new RuntimeException("该对象已经加入到队列中,不需要重复加。。。");
}
Node node = new Node();
node.data = o;
if(this.head == null){
this.head = node;
this.tail = node;
}else {
this.tail.next = node;
this.tail = node;
}
this.num++;
pollLockCondition.signal();
return true;
}catch (Exception e){
e.printStackTrace();
}finally {
addLock.unlock();
}
return false;
}
@Override
public boolean offer(Object o) {
return false;
}
@Override
public Object remove() {
return null;
}
@Override
public Object poll() {
addLock.lock();
try{
if(this.head==null){
System.out.println("队列已空,请等待。。。");
pollLockCondition.await();
}else {
Node n = this.head;
this.head = this.head.getNext();
n.setNext(null);
this.num--;
addLockCondition.signal();
return n.getData();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
addLock.unlock();
}
return null;
}
@Override
public Object element() {
return null;
}
@Override
public Object peek() {
return null;
}
private class Node{
private Object data;
private Node next;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1、本资源包含并发编程基础知识的使用案例,包括:线程创建、Synchronized和Reentrantlock锁的使用、线程安全问题演示、Condition的应用、CountDownLatch的应用、Cyclicbarrier的应用、Semaphore的应用、线程池的应用、Completablefuture的应用、手写阻塞队列、forkjoin的应用、生产者消费者模型案例、ThreadLocal的应用等。 2、适合从来没有接触过并发编程的初级Java及以上的工程师。 3、本资源也是并发编程专栏的配套资料。
资源推荐
资源详情
资源评论
收起资源包目录
Java并发编程相关技术使用案例 (277个子文件)
CombineAcceptAfterDemo01.class 6KB
EitherDemo01.class 5KB
MyBlockQueue.class 5KB
ExceptionallyDemo01.class 5KB
ComposeDemo01.class 4KB
CompletableFutureDemo01.class 4KB
HandleDemo01.class 4KB
CompletableFutureDemo02.class 4KB
WhenCompleteDemo01.class 4KB
CompletableFutureDemo03.class 4KB
CompletableFutureDemo.class 4KB
ReadWriteDemo.class 4KB
MyQueue.class 4KB
ThreadPoolSubmitDemo.class 3KB
ThreadLocalDemo.class 3KB
Test.class 3KB
ThreadLoaclDemo03.class 3KB
ThreadLocalDemo1.class 3KB
SynDemo.class 3KB
FutureDemo.class 3KB
ThreadLocalDemo04.class 3KB
TransferAccount.class 2KB
Count.class 2KB
ThreadLocalDemo02.class 2KB
RejectDemo.class 2KB
AtomicDemo.class 2KB
ForkJoinDemo.class 2KB
TransferAccount03.class 2KB
TransferAccount02.class 2KB
ThreadLocalDemo03.class 2KB
Wife.class 2KB
ThreadLocalDemo02.class 2KB
Husband.class 2KB
VolatileRuleDemo01.class 2KB
AtomicDemo.class 2KB
CyclicBarrierDemo$Soldier.class 2KB
ClassLayoutDemo.class 2KB
ForkJoinDemo$CalcForJoinTask.class 2KB
CountDownLatchDemo.class 2KB
MyBlockQueue$Node.class 2KB
ThreadLocalDemo01.class 2KB
ThreadLocalDemo.class 2KB
VolatileDemo01.class 2KB
VolatileDemo02.class 2KB
FutureDemo$AddDemo.class 2KB
MyQueue$Node.class 2KB
FlagDemo.class 2KB
CyclicBarrierDemo.class 2KB
ThreadLocalDemo$2.class 2KB
ThreadLocalDemo$1.class 2KB
JoinDemo.class 2KB
Wife.class 2KB
ThreadPoolDemo.class 2KB
OrderDemo.class 2KB
VolatileRuleDemo03.class 2KB
Husband.class 2KB
ThreadLocalDemo1$2.class 2KB
ThreadLocalDemo1$3.class 2KB
CountDownLatchDemo$1.class 2KB
SemaphoreDemo$1.class 2KB
InterruptDemo01.class 1KB
JoinTest.class 1KB
MultiOrderListThread.class 1KB
InterruptDemo02.class 1KB
VolatileRuleDemo02.class 1KB
Test.class 1KB
HashDemo.class 1KB
User.class 1KB
Producer.class 1KB
DriveCar.class 1KB
CyclicBarrierDemo$BarrierRun.class 1KB
Consumer.class 1KB
SemaphoreDemo.class 1KB
Service2.class 1KB
Account.class 1KB
Service3.class 1KB
ModelDemo.class 1KB
GotoDemo.class 1KB
PhantomReferenceDemo.class 1KB
Allocator.class 1KB
SelfThreadDemo.class 1011B
SoftReferenceDemo.class 1009B
WeakReferenceDemo.class 1009B
ThreadLocalDemo1$1.class 1004B
RepeatLock.class 981B
MyCallable.class 973B
Task.class 972B
QueueDemo.class 965B
DriveCar.class 920B
StrongerReference.class 890B
MyTask.class 886B
Service1.class 846B
Task.class 843B
ThreadLocalDemo05.class 837B
ExecJavaTemplate.class 823B
ThreadLocalDemo02$2.class 816B
ThreadLocalDemo02$1.class 816B
UnRepeatLock.class 791B
ThreadDemoApplication.class 763B
ThreadDemo.class 759B
共 277 条
- 1
- 2
- 3
资源评论
木木_2024
- 粉丝: 2048
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功