java多線程實常式序實現與思想

来源:https://www.cnblogs.com/flamusagi/archive/2022/09/20/16712659.html
-Advertisement-
Play Games

寫程式之前要瞭解兩個概念 1.什麼是進程 2.什麼是線程 搞清楚這兩個概念之後 才能寫好一個合適而不會太抽象的程式 對進程和線程的理解見鏈接: https://blog.csdn.net/new_teacher/article/details/51469241 https://www.cnblogs ...


寫程式之前要瞭解兩個概念
1.什麼是進程
2.什麼是線程
搞清楚這兩個概念之後 才能寫好一個合適而不會太抽象的程式
對進程和線程的理解見鏈接:
https://blog.csdn.net/new_teacher/article/details/51469241
https://www.cnblogs.com/aaronthon/p/9824396.html
那麼理解了概念之後 如何寫程式?

以銀行取錢為例:
兩個人有一個相同的賬戶->這個賬戶存儲在銀行->去銀行取錢
個人理解:
銀行是進程 客戶是線程 取錢這個動作是基於客戶所擁有的賬戶來實現的
在此參考了以下代碼:
https://blog.csdn.net/u010988549/article/details/79158121
實現:

public class Bank {
    String ACname;
    double money;
    public synchronized void withdraw(double getMoney)
    {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        this.setMoney(this.getMoney()-getMoney);
        System.out.println(Thread.currentThread().getName()+" 取出"+getMoney+"元,當前餘額為: "+this.getMoney()+" 元");
    }
}
public class Person implements Runnable{
    Bank bank;

    public Person(Bank bank) {
        this.bank = bank;
    }

    @Override
    public void run() {
        this.bank.withdraw(1000);
    }
}

我的心得見註釋:

public static void main(String[] args){
      Bank bank1=new Bank("frank",10000);//作為進程 有一塊共用資源
      Person person=new Person(bank1);//通過共用資源來建立共用對象 通過共用對象來建立線程
        //線程通過對象來使用資源 從而建立run方法
      Thread t1=new Thread(person,"father");
      Thread t2=new Thread(person,"son");
      t1.start();
      t2.start();
}

同樣道理:
以視窗售票為例:
車站有共同的車票->車站有不同的視窗來售票
車站是進程 車票是共用資源 不同的視窗是線程
而視窗共有的是什麼呢 是票對吧 票在哪 在車站
代碼如下:

public class Station {
    int tickets;

    public synchronized void sell(int buyTickets)
    {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if(this.getTickets()>0)
        {
            this.setTickets(this.getTickets()-buyTickets);
            System.out.println(Thread.currentThread().getName() + ":賣票,票號為:" + this.getTickets());
        }
    }
}
public class SaleWindows implements Runnable {
    Station station;
    int number;

    @Override
    public void run() {
        station.sell(1);
    }
}
public static void main(String[] args){
    Station station=new Station(10);
    SaleWindows window1=new SaleWindows(station,1);//不同視窗
    SaleWindows window2=new SaleWindows(station,2);
    Thread t1=new Thread(window1,String.valueOf(window1.getNumber()));
    Thread t2=new Thread(window2,String.valueOf(window2.getNumber()));
    t1.start();
    t2.start();   
}
    
以上為寫程式的一點感悟

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬於行為型模式。 ...
  • 本文的重點在於說明工作中所使用的設計模式,為了能夠更好的理解設計模式,首先簡單介紹一下業務場景。使用設計模式,可以簡化代碼、提高擴展性、可維護性和復用性。有哪些設計模式,這裡就不再介紹了,網上很多,本文只介紹所用到設計模式。 ...
  • 大部分高級編程語言雖然語法不同,編譯器不同,學習它們的小哥哥小姐姐們不同,但有一點卻是出奇地一致:編程邏輯! 有些剛入行或剛入門的童鞋可能連編程是啥意思都沒弄懂,一下子又來了個「邏輯」,那是什麼?這裡說的邏輯,廣義上指的是抽象思維能力,也就是能思考那些客觀世界不存在的東西的能力。狹義上來說,就是明確 ...
  • 概要 設計模式類型:創建型 目標問題:創建對象時,參數設置的靈活性問題。(具體看案例) 接下來我們看一個需要改進的案例。 對象創建的優化 現在有個Employee類,你能預想到在開發中可能會出現的問題嗎?不一定是業務方面的問題哦。 最初版 public class Employee { privat ...
  • 這篇博客是我在B站看韓順平老師的數據結構和演算法的約瑟夫問題後的學習筆記,記錄一下,防止忘記,也希望能幫到各位小伙伴。 問題引入:設編號為 1,2,… n 的 n 個人圍坐一圈,約定編號為 k(1<=k<=n)的人從 1 開始報數,數 到 m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那 ...
  • 左值引用用於一級指針,特別是將它們和const關鍵字三者聯合使用時,有不同於普通左值引用的性質,主要表現在初始化方面,下麵總結一下。 ...
  • 下麵這段代碼是使用MatPlotLib繪製數據隨時間變化的趨勢。 import datetime as dt import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.pylab ...
  • Java面向對象 1.類和對象 1.1 類和對象的概念: 類是抽象的集合,對象是具體的實例。 類可以想象為製作蛋糕的模具,對象就是做出來的蛋糕。 類中包含屬性(欄位)和方法(操作) 1.2 類的定義: Class ClassName { 屬性1 屬性2 ··· 構造器1 構造器2(如果不寫,系統會默 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...