当前位置: 首页 > 后端技术 > Java

Java如何模拟真实的并发请求?

时间:2023-04-02 10:18:02 Java

作者:回去的时候链接:www.cnblogs.com/yougewe??有时候需要测试某个功能的并发性能,又不想用其他工具就干脆用自己的开发语言发出并发请求。最方便。用java模拟并发请求自然是很方便的,多开几个线程发起请求就可以了。但是这种请求一般都是有启动顺序的,不能算是真正的并发!怎样才能实现真正的同时并发呢?这就是我这篇文章想说的。阻塞式的CountDownLatch是java中提供的,最适合做这种事情。只需要:开启n个线程,加锁,开启所有线程;所有线程就绪后,按下打开按钮,真正发起并发请求。包com.test;导入java.io.BufferedReader;导入java.io.IOException;导入java.io.InputStream;导入java.io.InputStreamReader;导入java.io.OutputStream;导入java.net.HttpURLConnection;导入java。net.MalformedURLException;importjava.net.URL;importjava.util.concurrent.CountDownLatch;publicclassLatchTest{publicstaticvoidmain(String[]args)throwsInterruptedException{RunnabletaskTemp=newRunnable(){       //注意,这里是非线程序安全的,留坑privateintiCounter;@Overridepublicvoidrun(){for(inti=0;i<10;i++){//发起请求//HttpClientOp.doGet("https://www.baidu.com/");i计数器++;System.out.println(System.nanoTime()+"["+Thread.currentThread().getName()+"]iCounter="+iCounter);尝试{Thread.sleep(100);}赶上(中断异常ne){e.printStackTrace();}}}};LatchTestlatchTest=newLatchTest();latchTest.startTaskAllInOnce(5,taskTemp);}publiclongstartTaskAllInOnce(intthreadNums,finalRunnabletask)throwsInterruptedException{finalCountDownLatchstartGate=newCountDownLatch(1);finalCountDownLatchendGate=newCountDownLatch(threadNums);for(inti=0;i