執行緒併發問題及龜兔賽跑延時典例
執行緒併發問題及龜兔賽跑延時典例
併發問題
package com.xxgc.demo01;
//多個執行緒同時操作同一個物件
//買火車票的例子
//發現併發問題:多個執行緒操作同一個資源的情況下,執行緒不安全,資料紊亂.
//例如:不同的人買到同一張票,或者第0張票
public class TestThread4 implements Runnable {
private int ticketNums = 10;
@Override
public void run() {
while (true){
if(ticketNums<=0){
break;
}
//模擬延時
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"--->拿到了第"+ticketNums--+"張票");
}
}
public static void main(String[] args) {
TestThread4 ticket = new TestThread4();
new Thread(ticket,"小明").start();
new Thread(ticket,"老師").start();
new Thread(ticket,"黃牛").start();
}
}
龜兔賽跑-->延時處理
package com.xxgc.demo01;
//模擬龜兔賽跑
public class Race implements Runnable {
//勝利者
private static String winner;
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
//模擬兔子睡覺
if(Thread.currentThread().getName().equals("兔子")&& i%10==0){
try {
//兔子每10步休息1毫秒
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//判斷比賽是否結束
boolean flag = gameOver(i);
//如果比賽結束了,就停止程式
if (flag){
break;
}
System.out.println(Thread.currentThread().getName()+"--->跑了"+i+"步");
}
}
//判斷是否完成比賽
private boolean gameOver(int steps){ //int steps //步數
//判斷是否有勝利者
if(winner!=null){ //已經存在勝利者了
return true;
}
if(steps==100) {
winner = Thread.currentThread().getName();
System.out.println("winner is " + winner);
return true;
}
return false;
}
public static void main(String[] args) {
Race race = new Race();
new Thread(race,"兔子").start();
new Thread(race,"烏龜").start();
}
}
相關推薦
執行緒併發問題及龜兔賽跑延時典例
執行緒併發問題及龜兔賽跑延時典例 併發問題 package com.xxgc.demo01;//多個執行緒同時操作同一個物件//買火車票的例子//發現併發問題:多個執行緒操作同一個資源的情況下,執行緒不安全,資料紊亂.//例如:不同的
python多執行緒併發及測試框架案例
這篇文章主要介紹了python多執行緒併發及測試框架案例,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
Redis為什麼是單執行緒、及高併發快的3大原因詳解
Redis的高併發和快速原因 1.redis是基於記憶體的,記憶體的讀寫速度非常快; 2.redis是單執行緒的,省去了很多上下文切換執行緒的時間;
Java執行緒併發工具類CountDownLatch原理及用法
一、CountDownLatch 【1】CountDownLatch是什麼? CountDownLatch,英文翻譯為倒計時鎖存器,是一個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許一個或
併發07--執行緒池及Executor框架
一、JAVA中的執行緒池 執行緒池的實現原理及流程如下圖所示: 如上圖所示,當一個執行緒提交到執行緒池時(execute()或submit()),先判斷核心執行緒數(corePoolSize)是否已滿,如果未滿,則直接建立執行緒執
併發程式設計第二章--程序執行緒概念及應用
併發程式設計 2.1程序與執行緒 程序 程式由指令和資料組成,但這些指令要執行,資料要讀寫,就必須將指令載入至 CPU,資料載入至記憶體。在
併發程式設計(一)——多執行緒使用及原理
併發程式設計——多執行緒使用及原理 1、程序和執行緒 程序:本質是一個正在執行的程式。程式執行時系統會建立一個程序,並且會給每個程序分配獨立的記憶體地址空間保證每個程序地址不會互相干擾。
Python Socket多執行緒併發原理及實現
1.SocketServer模組編寫的TCP伺服器端程式碼 Socketserver原理圖 服務端: import SocketServer#匯入SocketServer,多執行緒併發由此類實現
多執行緒與高併發八-執行緒池及原始碼
幾類執行緒池 ThreadPoolExecutor:我們通常所說的執行緒池。多個執行緒共享同一個任務佇列。
Spring使用ThreadPoolTaskExecutor自定義執行緒池及實現非同步呼叫
多執行緒一直是工作或面試過程中的高頻知識點,今天給大家分享一下使用 ThreadPoolTaskExecutor 來自定義執行緒池和實現非同步呼叫多執行緒。
Java多執行緒併發程式設計和鎖原理解析
這篇文章主要介紹了Java多執行緒併發程式設計和鎖原理解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
Java執行緒併發訪問程式碼分析
這篇文章主要介紹了Java執行緒併發訪問程式碼分析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
Java執行緒狀態及切換、關閉執行緒的正確姿勢分享
前言 在講執行緒之前有必要討論一下程序的定義:程序是程式在一個數據集合上執行的過程,它是系統進行資源分配和排程的一個獨立單位。程序實體由程式段, 資料段 PCB(程序控制塊)組成。執行緒又是什麼?執行緒可以
執行緒安全及Python中的GIL原理分析
本文講述了執行緒安全及Python中的GIL。分享給大家供大家參考,具體如下: 摘要
python子執行緒退出及執行緒退出控制的程式碼
下面通過程式碼給大家介紹python子執行緒退出問題,具體內容如下所示: def thread_func():
python執行緒安全及多程序多執行緒實現方法詳解
程序和執行緒的區別 程序是對執行時程式的封裝,是系統資源排程和分配的基本單位
Java多執行緒狀態及方法例項解析
這篇文章主要介紹了Java多執行緒狀態及方法例項解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
Java多執行緒併發生產者消費者設計模式例項解析
一、兩個執行緒一個生產者一個消費者 需求情景 兩個執行緒,一個負責生產,一個負責消費,生產者生產一個,消費者消費一個。
Python多執行緒thread及模組使用例項
多執行緒類似於同時執行多個不同程式,多執行緒執行有如下優點: 使用執行緒可以把佔據長時間的程式中的任務放到後臺去處理。
C# 多執行緒對資源讀寫時如何控制的方法
1、多個執行緒對同一個佇列進行讀寫操作,要注意進行讀寫控制,某個執行緒在讀取的時候,不允許其它執行緒讀、寫;某個執行緒在寫的時候,不允許其它執行緒進行讀寫。