国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java程序設計-實驗五 Java多線程程序設計

這篇具有很好參考價值的文章主要介紹了Java程序設計-實驗五 Java多線程程序設計。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目的

1. 掌握Runnable接口實現多線程的方法
2. 掌握Thread類實現多線程的用法
3. 掌握Java語言中多線程編程的基本方法

1. 線程接力(45分)

要求:編寫一個應用程序,除了主線程外,還有三個線程:first、second和third。
first負責模擬一個紅色的按鈕從坐標(10,60)運動到(100,60);
second負責模擬一個綠色的按鈕從坐標(100,60)運動到(200,60);
third線程負責模擬一個藍色的按鈕從坐標(200,60)運動到(300,60)。

2. 線程的控制(45分)

要求:編寫一個程序,動畫顯示文本域中的字符串。在窗體的南面添加三個按鈕,為程序添加線程控制功能。

點擊開始按鈕(startBtn),線程開始啟動,文字逐個顯示,并且將按鈕狀態(tài)改變?yōu)榻茫ㄒ驗榫€程不能重復啟動)
點擊暫停按鈕(pauseBtn),線程暫停,文字顯示停止
點擊恢復按鈕(resumeBtn),線程恢復運行,文字繼續(xù)顯示
當線程執(zhí)行完畢后,恢復開始按鈕的狀態(tài)為可用。

線程接力

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MoveButton extends Frame implements Runnable, ActionListener {
    // 用Thread類聲明first,second,third三個線程對象
	Thread first,second,third;
    Button redButton, greenButton, blueButton, startButton;
    int distance = 10;

    MoveButton() {
        //分別創(chuàng)建first,second,third三個線程,用當前窗口做為該線程的目標對象
        first =new Thread(this);
        second = new Thread(this);
        third = new Thread(this);
        redButton = new Button();
        greenButton = new Button();
        blueButton = new Button();
        redButton.setBackground(Color.red);
        greenButton.setBackground(Color.green);
        blueButton.setBackground(Color.blue);
        startButton = new Button("start");
        startButton.addActionListener(this);

        setLayout(null);
        add(redButton);
        redButton.setBounds(10, 60, 15, 15);
        add(greenButton);
        greenButton.setBounds(100, 60, 15, 15);
        add(blueButton);
        blueButton.setBounds(200, 60, 15, 15);
        add(startButton);
        startButton.setBounds(10, 100, 30, 30);

        JLabel label1 = new JLabel("your name   不啦不啦不啊咯");
        add(label1);
        label1.setBounds(50, 105, 150, 25);

        setTitle("線程接力");
        setBounds(0, 0, 400, 200);
        setVisible(true);
        validate();
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {

				System.exit(0);
            }
        });
    }

    public void actionPerformed(ActionEvent e) {
        try {
            // 分別啟動三個線程
            first.start();
            second.start();
            third.start();

        } catch (Exception exp) {
        }
    }

    public void run() {
        while (true) {
            // 判斷當前占有CPU資源的線程是否是first
            if (Thread.currentThread()==first) {
                moveComponent(redButton);
                try {
                    Thread.sleep(20);
                } catch (Exception exp) {
                }
            }
// 判斷當前占有CPU資源的線程是否是second
            if (Thread.currentThread()==second) {
                moveComponent(greenButton);
                try {
                    Thread.sleep(10);
                } catch (Exception exp) {
                }
            }
// 判斷當前占有CPU資源的線程是否是third
            if (Thread.currentThread()==third) {
                moveComponent(blueButton);
                try {
                    Thread.sleep(20);
                } catch (Exception e) {

                }
            }
        }
    }

    public synchronized void moveComponent(Component b) {
        if (Thread.currentThread() == first) {
            while (distance > 100 && distance <= 300)
                try {
                    wait();
                } catch (Exception exp) {
                }
            distance = distance + 1;
            b.setLocation(distance, 60);
            if (distance >= 100) {
                b.setLocation(10, 60);
                notifyAll();
            }
        }
        if (Thread.currentThread() == second) {
            while ((distance>10 && distance<100) && (distance>200 && distance<300) )
                try {
                    wait();
                } catch (Exception exp) {
                }
            distance = distance + 1;
            b.setLocation(distance, 60);
            if (distance > 200) {
                b.setLocation(100, 60);
                notifyAll();
            }
        }
        if (Thread.currentThread() == third) {
            while (distance<200)
                try {
                    wait();
                } catch (Exception exp) {
                }
            distance = distance + 1;
            b.setLocation(distance, 60);
            if (distance > 300) {
                distance = 10;
                b.setLocation(200, 60);
                notifyAll();
            }
        }
    }

    public static void main(String[] args) {
        new MoveButton().setLocationRelativeTo(null);
    }
}
程序運行截圖

自己截圖粘貼進markdown

實驗總結

“線程接力”體現了Java多線程編程的線程切換特性,通過三個線程對一個組件進行移動,實現了多個線程間的協同作用。

線程的控制

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.BevelBorder;

public class RunnableDemo extends JFrame implements Runnable, ActionListener {
    private JTextArea textArea; // 文本域組件
    JLabel label;
    Button startBtn, pauseBtn, resumeBtn;
    Panel panel;
    Thread thread;
    boolean move = false;

    // 動畫顯示的文本字符串
    private String introduction = "現在大家已經對計算機很熟悉了,如今計算機的操作"
            + "系統(tǒng)可以同時執(zhí)行多個任務,在聽歌的同時能夠打字、下載文件,在聊天窗口打"
            + "字的時候,對方同時還能通過視頻看到你;聽到你。這一切都是使用多任務實現"
            + "的,Java語言使用多線程實現一個程序中的多個任務同時運行。程序員可以在程"
            + "序中執(zhí)行多個線程,每一個線程完成一個功能,并與其他線程并發(fā)執(zhí)行,這種機"
            + "制被稱為多線程。";

    public static void main(String args[]) {
        new RunnableDemo().setLocationRelativeTo(null); // 創(chuàng)建本類實例對象
    }

    public RunnableDemo() {
        setTitle("線程的控制");
        label = new JLabel("多線程簡介: your name   不啦不啦不啊咯"); // 標簽組件
        getContentPane().add(label, BorderLayout.NORTH);// 添加標簽到窗體
        textArea = new JTextArea("\t"); // 初始化文本域組件
        textArea.setBorder(new BevelBorder(BevelBorder.LOWERED));// 設置邊框
        textArea.setLineWrap(true); // 設置自動折行
        getContentPane().add(textArea, BorderLayout.CENTER);// 添加文本域組件到文本框
        startBtn = new Button("開始");
        pauseBtn = new Button("暫停");
        resumeBtn = new Button("恢復");
        startBtn.addActionListener(this);
        pauseBtn.addActionListener(this);
        resumeBtn.addActionListener(this);
        panel = new Panel();
        panel.add(startBtn);
        panel.add(pauseBtn);
        panel.add(resumeBtn);
        getContentPane().add(panel, BorderLayout.SOUTH);
        setBounds(0, 0, 383, 225); // 設置窗體大小位置
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true); // 顯示窗體
    }

    /**
     * Runnable接口方法,是線程的執(zhí)行方法
     */
    @Override
    public void run() {
        textArea.setText("\t");
        String[] intros = introduction.split(""); // 將字符串分割為數組
        for (String ch : intros) { // ForEach遍歷字符串數組
            while (!move) {
                try {
                    synchronized (this) {
                        wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            textArea.append(ch); // 添加一個字符到文本域
            try {
                Thread.sleep(100); // 線程休眠0.1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        startBtn.setEnabled(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == startBtn) {
        	thread =new Thread(this);
			thread.start();
			move=true;
			startBtn.setEnabled(false);

        } else if (e.getSource() == pauseBtn) {
        	move=false;
        } else if (e.getSource() == resumeBtn) {
        	move=true;
        	synchronized (this) {
				notifyAll();
			}
        }
    }
}

程序運行截圖

自己截圖粘貼進markdown

實驗總結

這個實例體現了Java多線程編程的線程控制特性,通過線程的控制實現了動畫效果的實時調整。
Java多線程編程非常重要,能夠提高程序運行效率,但同時也需要注意線程之間的協作和控制,避免死鎖。
文章來源地址http://www.zghlxwxcb.cn/news/detail-437497.html

到了這里,關于Java程序設計-實驗五 Java多線程程序設計的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Java面向對象程序設計實驗報告(實驗二 面向對象基礎練習)

    Java面向對象程序設計實驗報告(實驗二 面向對象基礎練習)

    ?? 作者: 命運之光? ?? 專欄:Java面向對象程序設計實驗報告 目錄 ?一、需求設計 ?二、概要設計 ?三、詳細設計 ?四、調試結果 ?五、測試結果 ?附錄:源程序代碼(帶注釋) 測試類demo2 Address類 Employee類 實驗二?面向對象基礎練習 實驗環(huán)境: Eclipse+JDK 實驗目的:

    2024年02月06日
    瀏覽(32)
  • Java程序設計:選實驗6 輸入輸出應用

    (1) 編寫一個程序,如果文件Exercisel_01.txt 不存在,就創(chuàng)建一個名為Exercisel_01.txt 的文件。向這個文件追加新數據。使用文本I/O將20個隨機生成的整數寫入這個文件。文件中的整數用空格分隔。 (2) 編寫一個程序,如果文件Exercisel_02.dat 不存在,就創(chuàng)建一個名為Exercisel_02.dat 的文件

    2024年01月19日
    瀏覽(23)
  • 實驗六 Java流式編程與網絡程序設計

    Client Server ClientPlus ServerPlus ReceiveThread 本關任務:編寫應用程序(SortArray.java),使用字節(jié)輸入/輸出流實現數據的保存和讀取。 Java 流功能相關的類都封裝在 java.io包中,所以要使用流類,必須導入java.io包。數據流是 Java 進行 I/O 操作的對象,它按照不同的標準可以分為不同的

    2024年02月03日
    瀏覽(27)
  • 基于java微信小程序教室實驗室預約系統(tǒng)設計與實現

    基于java微信小程序教室實驗室預約系統(tǒng)設計與實現

    開發(fā)概要 小程序開發(fā):微信開發(fā)者工具(MINA框架) 后臺環(huán)境:JDK1.8 + Tomcat8 后臺開發(fā)語言:Java 后臺開發(fā)框架:springboot 后臺模板引擎:Thymeleaf 后臺開發(fā)工具:Idea2020 數據庫:mysql8 數據庫管理工具:navicat 其他開發(fā)語言:html + css +javascript

    2024年02月11日
    瀏覽(28)
  • 計算機團隊畢業(yè)設計:JAVA教室實驗室預約系統(tǒng)+微信小程序系統(tǒng)設計與實現

    計算機團隊畢業(yè)設計:JAVA教室實驗室預約系統(tǒng)+微信小程序系統(tǒng)設計與實現

    本次選用JAVA進行教室實驗室預約系統(tǒng)團隊畢業(yè)設計開發(fā),包含:WEB網站系統(tǒng)+微信小程序系統(tǒng)。 ? 開發(fā)操作系統(tǒng):windows10 + 8G內存 + 500G WEB開發(fā)環(huán)境:JDK1.8 + Tomcat8 WEB開發(fā)語言:Java WEB開發(fā)框架:springboot WEB模板引擎:Thymeleaf WEB常規(guī)技術:html + css +javascript WEB開發(fā)工具:Idea 數據

    2024年02月13日
    瀏覽(20)
  • 鄭州輕工業(yè)大學-程序設計技術(Java)-PTA實驗1(7-5)-打印楊輝三角

    鄭州輕工業(yè)大學-程序設計技術(Java)-PTA實驗1(7-5)-打印楊輝三角

    本段代碼知識點在于對 for循環(huán)的應用 以及 二維數組的使用 ,同時將 if/else語句 嵌套在for循環(huán)中,并且在輸出階段對 格式 進行了規(guī)范,以下是詳解: 1. for循環(huán) 在Java語言中,有三種循環(huán)語句,分別是for語句,while語句以及do-while語句,其中for語句的使用在代碼編寫的過程中最

    2024年04月08日
    瀏覽(27)
  • 合肥工業(yè)大學宣城校區(qū)Java技術實驗二 基于GUI的網絡通信程序設計

    1.掌握Java中GUI程序的編寫,包括事件監(jiān)聽機制。 2.掌握Java的網絡通信編程,ServerSocket,Socket類的使用。 3.掌握Java中多線程的編程,Thread類,Runnable接口的使用。 4.掌握用面向對象的方法分析和解決復雜問題。 編寫程序完成以下功能: 1.設計一個基于GUI的客戶-服務器的

    2023年04月24日
    瀏覽(21)
  • C#面向對象程序設計課程實驗二: 實驗名稱:Windows 窗體程序

    C#面向對象程序設計課程實驗二: 實驗名稱:Windows 窗體程序

    (1) 掌握控件 Label、Button、TextBox 的常用屬性、方法、事件的基本應用; (2) 掌握控件 RadioButton、CheckBox 的常用屬性、方法、事件的基本應用通過簡單程 序; (3) 掌握框-架類控件 GroupBox、Panel、TabControl 的基本應用; (4) 掌握控件 ListBox、CombBox 、ListView 的常用屬性、方法、事件的

    2024年02月04日
    瀏覽(17)
  • C#程序設計實驗

    C#程序設計實驗

    實驗1 C# 基本編程 題目 VS下新建一個控制臺項目:諸如:hello world程序,運行程序輸出結果。并解釋C#程序的結構: 諸如:一個基本的C#程序包含幾部分 ,每一部分的功能是什么。。。 完整代碼 運行結果 這段代碼是一個經典的 “Hello World” 程序,用于展示 C# 語言的基本結構

    2024年02月08日
    瀏覽(16)
  • 南京郵電大學匯編語言程序設計實驗二(用戶登錄驗證程序的設計)

    1.掌握循環(huán)程序的編寫以及結束循環(huán)的方法。 2.掌握DOS、BIOS功能調用的使用方法。 用戶登錄驗證程序的實現 程序執(zhí)行后,給出提示操作,請用戶鍵入用戶名和密碼;用戶在鍵入密碼時,程序不回顯鍵入字符;只有當用戶鍵入的用戶名,密碼字符串和程序內定的字符串相同時

    2023年04月18日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包