Java多線(xiàn)程的sleep休眠的實(shí)現(xiàn)
了解這樣的幾個(gè)概念:
1.sleep指向當(dāng)前線(xiàn)程阻塞的毫秒數(shù)(就是可以讓線(xiàn)程停一會(huì))
2.sleep 存在異常 InterruptedException3.sleep 時(shí)間達(dá)到后線(xiàn)程進(jìn)入就緒狀態(tài)4.sleep 可以模擬網(wǎng)絡(luò)延時(shí),倒計(jì)時(shí)等5.sleep 每一個(gè)對(duì)象都有一個(gè)鎖,sleep 不會(huì)釋放鎖
寫(xiě)源碼:
package Demo04;
public class TestSleep implements Runnable{ //使用Runnable方法創(chuàng)建程序線(xiàn)程
private int ticketNums =10; //有10張票
@Override
public void run() { //重寫(xiě)run方法
while (true){ //寫(xiě)while 循環(huán)
if (ticketNums<=0){ //當(dāng)票數(shù)小于等于0
break; //停止循環(huán)
}
System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"票"); //輸出信息
}
}
public static void main(String[] args) { //這是它的主線(xiàn)程
TestSleep ticket = new TestSleep(); //創(chuàng)建對(duì)象
new Thread(ticket,"小王").start(); //啟動(dòng)線(xiàn)程
new Thread(ticket,"小李").start();
new Thread(ticket,"小慧").start();
}
}看結(jié)果:

在這個(gè)結(jié)果當(dāng)中,有重復(fù),但是不明顯
加sleep 休眠
package Demo04;
public class TestSleep implements Runnable{
private int ticketNums =10;
@Override
public void run() {
while (true){
if (ticketNums<=0){
break;
}
try {
Thread.sleep(5); //讓線(xiàn)程睡了5秒的時(shí)間 (模擬網(wǎng)絡(luò)延遲)
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"票");
}
}
public static void main(String[] args) {
TestSleep ticket = new TestSleep();
new Thread(ticket,"小王").start();
new Thread(ticket,"小李").start();
new Thread(ticket,"小慧").start();
}
}看結(jié)果:

這樣的重復(fù)會(huì)很多,所以sleep(休眠),起到模擬網(wǎng)絡(luò)延遲的作用, 可以放大問(wèn)題的可見(jiàn)性以及發(fā)生性
就是 ,有上面重復(fù)的 結(jié)果顯得明顯,即:多線(xiàn)程是不安全的
再寫(xiě)一個(gè)實(shí)例:
模擬倒計(jì)時(shí):
package Demo04;
//模擬倒計(jì)時(shí)
public class TestSleep02 {
public static void main(String[] args) {
try {
tenDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void tenDown() throws InterruptedException {
int num = 10;
while (true) {
Thread.sleep(1000);
System.out.println(num--);
if (num <= 0) {
break;
}
}
}
}看結(jié)果

它的顯示結(jié)果:(注意: 1000ms=1秒)
就是它會(huì)從十到一每隔一秒顯示一個(gè)數(shù)字,一直到一
到此這篇關(guān)于Java多線(xiàn)程的sleep休眠的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java多線(xiàn)程sleep休眠內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中創(chuàng)建線(xiàn)程的兩種方式詳細(xì)說(shuō)明
這篇文章主要介紹了Java中創(chuàng)建線(xiàn)程的兩種方式詳細(xì)說(shuō)明,Java使用java.lang.Thread類(lèi)代表線(xiàn)程,所有的線(xiàn)程對(duì)象都必須是Thread類(lèi)或其子類(lèi)的實(shí)例,每個(gè)線(xiàn)程的作用是完成一定的任務(wù),實(shí)際上就是執(zhí)行一段程序流即一段順序執(zhí)行的代碼,需要的朋友可以參考下2023-11-11
Spring?Boot的幾種統(tǒng)一處理方式梳理小結(jié)
這篇文章主要為大家介紹了Spring?Boot的幾種統(tǒng)一處理方式梳理小結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
SpringBoot之使用Redis實(shí)現(xiàn)分布式鎖(秒殺系統(tǒng))
這篇文章主要介紹了SpringBoot之使用Redis實(shí)現(xiàn)分布式鎖(秒殺系統(tǒng)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Nacos下線(xiàn)服務(wù)時(shí),下線(xiàn)報(bào)錯(cuò)選舉Leader失敗問(wèn)題以及解決
這篇文章主要介紹了Nacos下線(xiàn)服務(wù)時(shí),下線(xiàn)報(bào)錯(cuò)選舉Leader失敗問(wèn)題以及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
springboot項(xiàng)目中后端接收前端傳參的方法示例詳解
這篇文章主要介紹了springboot項(xiàng)目中一些后端接收前端傳參的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
詳解使用Spring?Data?repository進(jìn)行數(shù)據(jù)層的訪問(wèn)問(wèn)題
這篇文章主要介紹了使用Spring?Data?repository進(jìn)行數(shù)據(jù)層的訪問(wèn),抽象出Spring Data repository是因?yàn)樵陂_(kāi)發(fā)過(guò)程中,常常會(huì)為了實(shí)現(xiàn)不同持久化存儲(chǔ)的數(shù)據(jù)訪問(wèn)層而寫(xiě)大量的大同小異的代碼,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-06-06

