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

在這個結果當中,有重復,但是不明顯
加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); //讓線程睡了5秒的時間 (模擬網絡延遲)
}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();
}
}看結果:

這樣的重復會很多,所以sleep(休眠),起到模擬網絡延遲的作用, 可以放大問題的可見性以及發(fā)生性
就是 ,有上面重復的 結果顯得明顯,即:多線程是不安全的
再寫一個實例:
模擬倒計時:
package Demo04;
//模擬倒計時
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;
}
}
}
}看結果

它的顯示結果:(注意: 1000ms=1秒)
就是它會從十到一每隔一秒顯示一個數字,一直到一
到此這篇關于Java多線程的sleep休眠的實現的文章就介紹到這了,更多相關Java多線程sleep休眠內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring?Boot的幾種統(tǒng)一處理方式梳理小結
這篇文章主要為大家介紹了Spring?Boot的幾種統(tǒng)一處理方式梳理小結,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
SpringBoot之使用Redis實現分布式鎖(秒殺系統(tǒng))
這篇文章主要介紹了SpringBoot之使用Redis實現分布式鎖(秒殺系統(tǒng)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
Nacos下線服務時,下線報錯選舉Leader失敗問題以及解決
這篇文章主要介紹了Nacos下線服務時,下線報錯選舉Leader失敗問題以及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
詳解使用Spring?Data?repository進行數據層的訪問問題
這篇文章主要介紹了使用Spring?Data?repository進行數據層的訪問,抽象出Spring Data repository是因為在開發(fā)過程中,常常會為了實現不同持久化存儲的數據訪問層而寫大量的大同小異的代碼,本文給大家介紹的非常詳細,需要的朋友參考下吧2022-06-06

