java基础 并发测试代码

This commit is contained in:
wyl
2024-07-01 00:28:32 +08:00
parent da0e11337c
commit 30d826bb8e
23 changed files with 1258 additions and 25 deletions
@@ -0,0 +1,41 @@
package concurrent.queue;
import lombok.AllArgsConstructor;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ConcurrentLinkedQueue;
@AllArgsConstructor
public class BlockingQueueTest {
ArrayBlockingQueue<Integer> arrayBlockingQueue;
Integer methodNumber;
public void offerTest() {
ConcurrentLinkedQueue<Integer> concurrentLinkedQueue = new ConcurrentLinkedQueue<>();
boolean offer = arrayBlockingQueue.offer(1);
if (!offer) {
System.out.println("队列满了");
return;
}
System.out.println("添加成功");
}
public void addTest() {
boolean offer = arrayBlockingQueue.add(1);
if (!offer) {
System.out.println("队列满了");
return;
}
System.out.println("添加成功");
}
public void putTest() throws InterruptedException {
arrayBlockingQueue.put(1);
System.out.println("添加成功");
}
public static void main(String[] args) {
}
}
@@ -0,0 +1,74 @@
package concurrent.queue;
import lombok.Data;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
* @description: 延迟队列
* @author: wangyl
* @date: 2024/6/30
*/
@Data
public class DelayedQueue implements Delayed {
/**
* 延迟时间
*/
private long time;
/**
* 延迟任务名称
*/
private String name;
/**
* 延迟任务创建时间
*/
private String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
public DelayedQueue(String name, long time, TimeUnit unit) {
this.name = name;
this.time = System.currentTimeMillis() + (time > 0 ? unit.toMillis(time) : 0);
}
@Override
public long getDelay(TimeUnit unit) {
return time - System.currentTimeMillis();
}
@Override
public int compareTo(Delayed o) {
DelayedQueue Order = (DelayedQueue) o;
long diff = this.time - Order.time;
if (diff <= 0) {
return -1;
} else {
return 1;
}
}
public static void main(String[] args) throws InterruptedException {
DelayedQueue Order1 = new DelayedQueue("Order1", 5, TimeUnit.SECONDS);
DelayedQueue Order2 = new DelayedQueue("Order2", 10, TimeUnit.SECONDS);
DelayedQueue Order3 = new DelayedQueue("Order3", 15, TimeUnit.SECONDS);
DelayQueue<DelayedQueue> delayQueue = new DelayQueue<>();
delayQueue.put(Order1);
delayQueue.put(Order2);
delayQueue.put(Order3);
System.out.println("订单延迟队列开始时间:" + LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
while (delayQueue.size() != 0) {
/**
* 取队列头部元素是否过期
*/
DelayedQueue take = delayQueue.take();
System.out.format("订单:{%s}被取消, 放入时间{%s},取消时间:{%s}\n", take.getName(), take.getTimestamp(), LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
Thread.sleep(1000);
}
}
}