91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Java多線程來實現簡單的售票功能

發布時間:2022-02-24 14:27:44 來源:億速云 閱讀:158 作者:小新 欄目:開發技術

小編給大家分享一下怎么使用Java多線程來實現簡單的售票功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

完整代碼

package com.ql;

import lombok.SneakyThrows;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;

public class Mythread extends Thread {
    public Mythread(String name) {
        super(name);
    }

    @SneakyThrows
    @Override
    public void run() {
        for (; ; ) {
            //鎖的狀態是默認是打開狀態
            //獲取鎖的狀態
            int lockStatus = this.findLockStatus();
            if (lockStatus == 0) {
                //修改鎖的狀態 =>>鎖定
                this.locked();
                //獲取總票數
                int tickets = this.findTickets();
                //剩余票數
                int i = this.remainVotes();
                //判斷票數
                if (tickets < 1) {
                    //已售賣完 跳出循環
                    break;
                } else {
                    //賣一張票
                    int remainVotes = this.saleOneTicket();
                    System.out.println(this.getName() + "當前的票數:" + tickets);
                    System.out.println(this.getName() + "售票后:" + remainVotes);
                    //  釋放鎖
                    this.unlock();
                }
            }
        }


    }

    /**
     * 剩余票數
     *
     * @return
     * @throws IOException
     */
    private int remainVotes() throws IOException, InterruptedException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/remainVotes").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();

        String string = response.body().string();
        int ticketsVote = Integer.parseInt(string);
        return ticketsVote;
    }

    /**
     * 釋放鎖
     */
    private void unlock() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/unlock").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
    }

    /**
     * 賣票一張
     */
    private int saleOneTicket() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/saleOneTicket").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
        String string = response.body().string();
        int remainVotes = Integer.parseInt(string);
        return remainVotes;
    }

    /**
     * 獲取鎖的狀態
     */
    private int findLockStatus() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/findLock").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
        String string = response.body().string();
        int lockStatus = Integer.parseInt(string);
        return lockStatus;
    }

    /**
     * 修改鎖狀態
     */
    private int locked() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/locked").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
        String string = response.body().string();

        int lockStatus = Integer.parseInt(string);
        return lockStatus;
    }


    /**
     * 查看總票數
     *
     * @throws IOException
     */
    private int findTickets() throws IOException {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url("http://localhost:8080/lock/findTickets").build();
        Call call = okHttpClient.newCall(request);
        Response response = call.execute();
        String string = response.body().string();
        Integer tickets = Integer.parseInt(string);
        return tickets;
    }
}
package com.ql;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/lock")
public class ClientService {
    /**
     * 總票數
     */
    private static Integer tickets = 100;

    /**
     * 鎖的狀態 0:未鎖   1:鎖
     */
    private static Integer lockStatus = 0;

    /**
     * 賣票
     */
    @RequestMapping("/saleOneTicket")
    public Integer saleOneTicket() {
        return tickets = tickets - 1;
    }

    /**
     * 查看總票數
     */
    @RequestMapping("/findTickets")
    public Integer findTickets() {
        return tickets;
    }

    /**
     * 查看鎖的狀態
     */
    @RequestMapping("/findLock")
    public synchronized Integer findLock() {
        Integer lock=lockStatus;
        //改變鎖狀態,使線程串行執行
        this.locked();
        return lock;
    }

    /**
     * 改變鎖狀態
     */
    @RequestMapping("/locked")
    public synchronized int locked() {
        //更改鎖的狀態為1(上鎖),避免多個線程同時獲取鎖的狀態都為0(未上鎖),從而導致線程安全問題
        lockStatus = 1;
        return lockStatus;
    }

    /**
     * 釋放鎖
     */
    @RequestMapping("/unlock")
    public synchronized int unlock() {
        return lockStatus = 0;
    }

    /**
     * 剩余票數
     *
     * @return
     */
    @RequestMapping("/remainVotes")
    public int remainVotes() {

        return tickets;
    }

}

以上是“怎么使用Java多線程來實現簡單的售票功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

习水县| 渭源县| 阿拉善盟| 祁阳县| 惠水县| 大足县| 大同县| 双城市| 永清县| 奉节县| 北辰区| 晴隆县| 清新县| 土默特右旗| 南投市| 漳州市| 澄迈县| 晋江市| 汕尾市| 阿坝| 尚志市| 丹凤县| 迁安市| 永州市| 镇雄县| 柘荣县| 长泰县| 长丰县| 平和县| 辉南县| 大连市| 富川| 广南县| 隆回县| 邹平县| 安徽省| 昔阳县| 永州市| 中超| 樟树市| 柳林县|