最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線程解決龜兔賽跑問題詳解

 更新時間:2022年08月24日 08:21:27   作者:小虛竹and掘金  
這篇文章主要為大家詳細介紹了Java如何使用線程休眠模擬龜兔賽跑比賽問題,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

多線程4(龜兔賽跑-休眠線程)

1.題目

在龜兔賽跑中,領先的兔子因為通宵寫博客,中途太累睡著了,跑輸了烏龜。這個故事說明了兔子是愛學習的同學。咳咳,通宵是不可取的,大家別學。

實現(xiàn):使用線程休眠模擬龜兔賽跑比賽

2.解題思路

創(chuàng)建一個類:RaceFrame,繼承了JFrame。用來界面顯示兩個文本區(qū)域,用來輸出烏龜和兔子的比賽記錄,比賽開始按鈕用來開始比賽。

編寫內(nèi)部類:Rabbit,該類實現(xiàn)了Runnable接口,在run()方法中,讓兔子休眠了時間。

Thread是程序中的執(zhí)行線程。JAVA虛擬機允許應用程序并發(fā)地運行多個執(zhí)行線程。

sleep()方法是Thread類的一個靜態(tài)方法。

3.代碼詳解

package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.UIManager;
import java.awt.Font;
/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改記錄:
 * 修改后版本	        修改人		修改日期			修改內(nèi)容
 * 2022/5/11.1	    xiaoxuzhu		2022/5/11		    Create
 * </pre>
 * @date 2022/5/11
 */

public class RaceFrame extends JFrame {

    /**
     *
     */
    private static final long serialVersionUID = 4941729012450153307L;
    private JPanel contentPane;
    private JTextArea rabbitTextArea;
    private JTextArea tortoiseTextArea;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Throwable e) {
            e.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    RaceFrame frame = new RaceFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public RaceFrame() {
        setTitle("休眠當前線程");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new BorderLayout(0, 0));

        JPanel buttonPanel = new JPanel();
        contentPane.add(buttonPanel, BorderLayout.SOUTH);

        JButton button = new JButton("比賽開始");
        button.setFont(new Font("微軟雅黑", Font.PLAIN, 16));
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                do_button_actionPerformed(arg0);
            }
        });
        buttonPanel.add(button);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);
        panel.setLayout(new GridLayout(1, 2, 5, 5));

        JPanel rabbitPanel = new JPanel();
        panel.add(rabbitPanel);
        rabbitPanel.setLayout(new BorderLayout(0, 0));

        JLabel rabbitLabel = new JLabel("兔子的比賽記錄");
        rabbitLabel.setFont(new Font("微軟雅黑", Font.PLAIN, 16));
        rabbitLabel.setHorizontalAlignment(SwingConstants.CENTER);
        rabbitPanel.add(rabbitLabel, BorderLayout.NORTH);

        JScrollPane rabbitScrollPane = new JScrollPane();
        rabbitPanel.add(rabbitScrollPane, BorderLayout.CENTER);

        rabbitTextArea = new JTextArea();
        rabbitTextArea.setFont(new Font("微軟雅黑", Font.PLAIN, 16));
        rabbitScrollPane.setViewportView(rabbitTextArea);

        JPanel tortoisePanel = new JPanel();
        panel.add(tortoisePanel);
        tortoisePanel.setLayout(new BorderLayout(0, 0));

        JLabel tortoiseLabel = new JLabel("烏龜?shù)谋荣愑涗?);
        tortoiseLabel.setFont(new Font("微軟雅黑", Font.PLAIN, 16));
        tortoiseLabel.setHorizontalAlignment(SwingConstants.CENTER);
        tortoisePanel.add(tortoiseLabel, BorderLayout.NORTH);

        JScrollPane tortoiseScrollPane = new JScrollPane();
        tortoisePanel.add(tortoiseScrollPane, BorderLayout.CENTER);

        tortoiseTextArea = new JTextArea();
        tortoiseTextArea.setFont(new Font("微軟雅黑", Font.PLAIN, 16));
        tortoiseScrollPane.setViewportView(tortoiseTextArea);
    }

    protected void do_button_actionPerformed(ActionEvent arg0) {
        Runnable run1 = new Rabbit();
        Runnable run2 = new Tortoise();
        Thread rabbit = new Thread(run1);
        Thread tortoise = new Thread(run2);
        rabbit.start();
        tortoise.start();
    }

    private class Rabbit implements Runnable {
        @Override
        public void run() {
            for (int i = 1; i < 11; i++) {// 循環(huán)10次模擬賽跑的過程
                String text = rabbitTextArea.getText();// 獲得文本域中的信息
                try {
                    Thread.sleep(1);// 線程休眠0.001秒,模擬兔子在跑步
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                rabbitTextArea.setText(text + "兔子跑了" + i + "0米\n");// 顯示兔子的跑步距離
                if (i == 9) {
                    rabbitTextArea.setText(text + "兔子在睡覺\n");// 當跑了90米時開始睡覺
                    try {
                        Thread.sleep(10000);// 線程休眠10秒,模擬兔子在睡覺
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                if (i == 10) {
                    try {
                        Thread.sleep(1);// 線程休眠0.001秒,模擬兔子在跑步
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    rabbitTextArea.setText(text + "兔子到達終點\n");// 顯示兔子到達了終點
                }
            }
        }
    }

    private class Tortoise implements Runnable {

        @Override
        public void run() {
            for (int i = 1; i < 11; i++) {
                String text = tortoiseTextArea.getText();
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                tortoiseTextArea.setText(text + "烏龜跑了" + i + "0米\n");
                if (i == 10) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    tortoiseTextArea.setText(text + "烏龜?shù)竭_終點\n");
                }
            }

        }

    }
}

到此這篇關于Java多線程解決龜兔賽跑問題詳解的文章就介紹到這了,更多相關Java多線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • springboot之Validation參數(shù)校驗詳細解讀

    springboot之Validation參數(shù)校驗詳細解讀

    這篇文章主要介紹了springboot之Validation參數(shù)校驗詳細解讀,本篇是關于springboot的參數(shù)校驗知識,當然也適用其它java應用,讀完本篇將學會基本的參數(shù)校驗,自定義參數(shù)校驗和分組參數(shù)校驗,需要的朋友可以參考下
    2023-10-10
  • java后臺調(diào)用接口及處理跨域問題的解決

    java后臺調(diào)用接口及處理跨域問題的解決

    這篇文章主要介紹了java后臺調(diào)用接口,處理跨域的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java多線程之并發(fā)編程的核心AQS詳解

    Java多線程之并發(fā)編程的核心AQS詳解

    AQS ( AbstractQueuedSynchronizer)是一個用來構建鎖和同步器的框架,使用AQS能簡單且高效地構造出應用廣泛的大量的同步器,下面小編和大家來一起學習一下吧
    2021-09-09
  • Java中的靜態(tài)綁定和動態(tài)綁定詳細介紹

    Java中的靜態(tài)綁定和動態(tài)綁定詳細介紹

    這篇文章主要介紹了Java中的靜態(tài)綁定和動態(tài)綁定詳細介紹,在Java中存在兩種綁定方式,一種為靜態(tài)綁定,又稱作早期綁定,另一種就是動態(tài)綁定,亦稱為后期綁定,需要的朋友可以參考下
    2015-01-01
  • Java集合之Map接口的實現(xiàn)類精解

    Java集合之Map接口的實現(xiàn)類精解

    Map提供了一種映射關系,其中的元素是以鍵值對(key-value)的形式存儲的,能夠?qū)崿F(xiàn)根據(jù)key快速查找value;Map中的鍵值對以Entry類型的對象實例形式存在;鍵(key值)不可重復,value值可以重復,一個value值可以和很多key值形成對應關系,每個建最多只能映射到一個值
    2021-09-09
  • Java中的Excel框架使用詳解

    Java中的Excel框架使用詳解

    這篇文章主要介紹了Java中的Excel框架使用詳解,Java解析、生成Excel比較有名的框架有Apache poi、jxl,但他們都存在一個嚴重的問題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,需要的朋友可以參考下
    2023-11-11
  • Java如何修改JsonObject中的屬性值

    Java如何修改JsonObject中的屬性值

    這篇文章主要介紹了Java如何修改JsonObject中的屬性值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java設計模式:原始模型模式

    java設計模式:原始模型模式

    這篇文章主要為大家詳細介紹了Java設計模式之Prototype原型模式的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • springboot打包無法讀取yml、properties等配置文件的解決

    springboot打包無法讀取yml、properties等配置文件的解決

    這篇文章主要介紹了springboot打包無法讀取yml、properties等配置文件的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 淺談java并發(fā)之計數(shù)器CountDownLatch

    淺談java并發(fā)之計數(shù)器CountDownLatch

    CountDownLatch是通過一個計數(shù)器來實現(xiàn)的,當我們在new 一個CountDownLatch對象的時候需要帶入該計數(shù)器值,該值就表示了線程的數(shù)量。下面我們來深入了解一下吧
    2019-06-06

最新評論

平昌县| 故城县| 松滋市| 来宾市| 涿州市| 沁阳市| 望奎县| 休宁县| 海安县| 白水县| 建水县| 阿勒泰市| 吴忠市| 拜泉县| 监利县| 玛多县| 大竹县| 沁水县| 临泉县| 高邮市| 大丰市| 望都县| 房山区| 中方县| 江达县| 渝北区| 汉寿县| 昌黎县| 五指山市| 会宁县| 新津县| 神农架林区| 阿尔山市| 枞阳县| 万全县| 开封县| 南川市| 宝丰县| 神农架林区| 盐山县| 芮城县|