java多線程高并發(fā)

“高并發(fā)和多線程”總是被一起提起,給人感覺兩者好像相等,實(shí)則高并發(fā) ≠ 多線程

  多線程是完成任務(wù)的一種方法,高并發(fā)是系統(tǒng)運(yùn)行的一種狀態(tài),通過多線程有助于系統(tǒng)承受高并發(fā)狀態(tài)的實(shí)現(xiàn)

一,高并發(fā)與多線程

1,高并發(fā):高并發(fā)不是JAVA的專有的東西,是語(yǔ)言無關(guān)的廣義的,為提供更好互聯(lián)網(wǎng)服務(wù)而提出的概念。高并發(fā)想讓服務(wù)器(tomcat)能接受處理多用戶多請(qǐng)求。

2,多線程:多線程只是為了達(dá)到高并發(fā)目的(首先得有多線程接收處理多任務(wù),才有高并發(fā)發(fā)生)。在某個(gè)細(xì)節(jié)點(diǎn)上,為實(shí)現(xiàn)某并發(fā)功能而采用的一種具體的實(shí)現(xiàn)方法,這種功能也可以由多進(jìn)程實(shí)現(xiàn),

當(dāng)然,也可以由多進(jìn)程,多線程一起實(shí)現(xiàn)。這是戰(zhàn)術(shù)上的并行。

總之:高并發(fā)是一種現(xiàn)象,多線程是一種Java提高性能的手段

其實(shí)就是用CountDownLatch來使多個(gè)線程同時(shí)運(yùn)行,同時(shí)發(fā)送請(qǐng)求,雖然post的事件不能保證同時(shí),但發(fā)post能保證同時(shí)(相差0.2毫秒),通過這種方法,測(cè)試了redis的setkey,getkey來保證不重復(fù)數(shù)據(jù)的時(shí)間閾值在幾百納秒,再短就算redis也無能為力了,所以多線程雖然快,但是沒鎖,還是不太安全。。

@Service

public class TestConcurrentService {

@Autowired

private ApiHttpClientService apiHttpClientService;

private static final Logger logger = Logger.getLogger(TestConcurrentService.class);

public void testConcurrent1(String sign) {

ExecutorService exec = Executors.newFixedThreadPool(3);

CountDownLatch begin = new CountDownLatch(1);

CountDownLatch end = new CountDownLatch(3);

for (int i = 0; i < 3; i++) {

exec.execute(new HttpRequestUtils(begin, end, sign));

}

begin.countDown();

try {

end.await();

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

}

exec.shutdown();

logger.info("main method end");

}

public class HttpRequestUtils implements Runnable {

private Logger log = Logger.getLogger(HttpRequestUtils.class);

private CountDownLatch begin;

private CountDownLatch end;

private String sign;

private String url = "http://localhost:8080/score/private/v1/injectsg";

public HttpRequestUtils(CountDownLatch begin, CountDownLatch end, String sign) {

this.begin = begin;

this.end = end;

this.sign = sign;

}

@Override

public void run() {

try {

begin.await();

Map header = new HashMap<>();

header.put("Content-Type", "application/json");

header.put("sign", sign);

ScoreRequestBean bean = new ScoreRequestBean();

Data data = new Data();

data.setRemark("單發(fā)測(cè)試");

data.setExtId("ext111111519");

data.setPartnerMemberId(297);

data.setPoints(1);

bean.setData(data);

bean.setEventId("123asdasd");

System.out.println("線程" + Thread.currentThread().getName() +

"已接受命令," + "時(shí)間為:" + System.nanoTime() + "|" + System.nanoTime() / 1000000L);

apiHttpClientService.post(url, null, header, bean, ResultConstant.class);

System.out.println("線程" + Thread.currentThread().getName() +

"命令已結(jié)束");

} catch (Exception e) {

log.error(e.getMessage(), e);

} finally {

end.countDown();

}

}

}

}

------------------------------------------------------------------------------------------------------------------------------

本文來自 旭日Follow_24 的CSDN 博客 ,全文地址請(qǐng)點(diǎn)擊:https://mp.csdn.net/postedit/81293321

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容