1. 程式人生 > >LinkedBlockingQueue多執行緒測試

LinkedBlockingQueue多執行緒測試

public class FillQueueThread extends Thread {
	private Queue queue;
	public FillQueueThread(Queue queue){
		this.queue = queue;
	}
	@Override
	public void run() {
		while(true){
			try {
				boolean added = queue.offer(UUID.randomUUID().toString());
				if(added) {
					System.out.println(Thread.currentThread().getName()+" add 1 element");
				}else{
					System.out.println(Thread.currentThread().getName()+" is blocked, wait");
					//this.wait(); //no need to invoked wait
				}
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
}	
public class PollQueueThread extends Thread {
	private Queue queue;
	public PollQueueThread(Queue queue){
		this.queue = queue;
	}
	@Override
	public void run() {
		while(true){
			try {
				Object el = queue.poll();
				if(null == el){
					System.out.println(Thread.currentThread().getName()+" is blocked, wait");
					//this.wait(); //no need to invoked wait
				}else{
					System.out.println(Thread.currentThread().getName()+" pool 1 element");
				}
				Thread.sleep(50);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
}

public class MonitorQueueThread extends Thread {
	private Queue queue;
	public MonitorQueueThread(Queue queue){
		this.queue = queue;
	}
	@Override
	public void run() {
		while(true){
			System.err.println("queue size:"+queue.size());
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
}

public class HelloQueue {

	public static void main(String[] args) {
		//ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(500,true);
		LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(500);
		int threadFillNumber = 10;
		int threadPollNumber = 3;
		for(int i=0; i<threadFillNumber; i++){
			FillQueueThread th = new FillQueueThread(queue);
			th.start();
		}
		for(int i=0; i<threadPollNumber; i++){
			PollQueueThread th = new PollQueueThread(queue);
			th.start();
		}
		
		MonitorQueueThread monitor = new MonitorQueueThread(queue);
		monitor.start();
	}

}


相關推薦

LinkedBlockingQueue執行測試

public class FillQueueThread extends Thread { private Queue queue; public FillQueueThread(Queue queue){ this.queue = queue; } @Over

【學習筆記】Java-Concurrent-執行測試模板

import java.util.concurrent.CountDownLatch; /** * 多執行緒測試模板 * * @author Mairuis * @date 2018/10/11 */ public class ConcurrentTest { public s

執行測試程式碼

package com.yy.read;import java.util.HashSet;import java.util.List;import java.util.Random;import java.util.Set;import java.util.concurrent.Callable

TestNG執行測試-用xml檔案實現

MultiThreadOnXml類: package com.janson.multiThread; import org.testng.annotations.Test; public class MultiThreadOnXml { @Test public void tes

scala actor 執行測試

package com.Actor import java.io.File import scala.actors.Actor import scala.io.Source /** * author pg * date 2018-12-17 */ //本程式是用scala 原生的a

Java-Concurrent-執行測試模板

import java.util.concurrent.CountDownLatch; /** * 多執行緒測試模板 * * @author Mairuis * @date 2018/10/11 */ public class ConcurrentTest {

Springboot專案,執行測試使用Redis生成訂單id

Springboot專案,多執行緒測試使用Redis生成訂單id springboot測試類: import org.junit.After; import org.junit.Before; import org.junit.runner.RunWith; import org

怎麼使用Junit進行執行測試

Junit本身是不支援普通的多執行緒測試的,這是因為Junit的底層實現上,是用System.exit退出用例執行的,主執行緒終止jvm都停了,其他執行緒肯定執行不了了(具體分析檢視原始碼org.junit.runner.JUnitCore)。 本文介紹一款第

Junit單元執行測試執行執行

Junit單元測試子執行緒不執行 環境 - Junit:4 - jdk:1.8 1、現象描述 在測試CountDownLatch類時,使用main函式能夠正常執行的功能,改用Junit測試時,Debug除錯時不進入子執行緒執行,直接執行時,有時候能

在本地使用GroboUtils進行執行測試

在本地開發的時候有時候需要用到多執行緒去測試某些類或者方法是否有執行緒安全問題,由於本地開發機器硬體限制通過硬編碼的方式往往難以達到多個執行緒同時訪問的效果,這時可以考慮使用GroboUtils達到目的。順便提一句,使用Junit是不行的,去看原始碼會發現junit是Sys

Junit單元測試不支援執行測試--原因分析和問題解決

問題現象 import org.junit.Test;/** * @Title: junit多執行緒測試 * @ClassName: JunitMultiThreadTest.java *

關於JUNIT4 中的執行測試的疑惑

 傳說junit4可以進行多執行緒測試,但是我一直沒有找到如何使用註解測試,只有把多執行緒嚇到測試用例裡面進行測試,但是不測不知道,一測發現一個大問題,呵呵。程式碼如下 @Test public void hibernatePool() { ApplicationConte

spring-junit執行測試

使用junit進行單元測試的時候,並不能對多執行緒的操作進行測試。一般情況下是使用main方法來進行測試。但如果專案需要載入大量的配置的情況下,測試類寫起來很複雜,需要去寫載入各種配置檔案的程式碼

TestNg之XMl形式實現執行測試

為什麼要使用多執行緒測試? 在實際測試中,為了節省測試時間,提高測試效率,在實際測試場景中經常會採用多執行緒的方式去執行,比如爬蟲爬資料,多瀏覽器並行測試。 關於多執行緒並行測試 TestNG中實現多執行緒並行執行,可以通過以下幾種方法: @Test註解的形式 Xml檔案的配置的形式 本文

junit測試和main方法執行中遇到的問題

利用Junit測試多執行緒時經常遇到任務執行不完就會停止,下面是我的任務執行緒類: package timerTest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.i

Jmeter測試執行併發請求 與 OSS 物件儲存 測試報告

  1.測試資料夾包含特殊字元 出現重大BUG問題:  \\ 和 /  運用到Key中  資料夾不能刪除 解決方案:應該在根源上傳之前進行   規避  出現這樣的字元在一起 直接丟擲錯誤資訊給使用者 2.測

Junit測試執行時遇到的問題

問題的產生 這個問題是我在做支付寶自動對賬功能時發現的,因為支付寶對賬介面下載的對賬單是zip壓縮檔案形式返回的,所以要實現自動對賬功能需要在我呼叫支付寶對賬介面下載完zip檔案之前先啟動一個執行緒去監控我用於存放zip檔案的資料夾,當這個資料夾有zip檔案生成時,自動觸發“解壓”方法

c#執行操作測試(阻塞執行,結束任務)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Te

python編寫的執行介面併發測試

import requests import json import threading import time import uuid class postrequests(): def __init__(self): #產生UUID

提高C++效能的程式設計技術筆記:執行記憶體池+測試程式碼

為了使多個執行緒併發地分配和釋放記憶體,必須在分配器方法中新增互斥鎖。 全域性記憶體管理器(通過new()和delete()實現)是通用的,因此它的開銷也非常大。 因為單執行緒記憶體管理器要比多執行緒記憶體管理器快的多,所以如果要分配的大多數記憶體塊限於單執行緒中使用,那麼可以顯著提升效