實驗六 Java多線程

目錄

一、實驗目的

二、實驗代碼

1. 通過繼承Thread類的方法創建兩個線程,在Thread構造方法中指定線程的名稱,並將這兩個線程的名字打印出來。

2. 通過實現Runnable接口的方法創建一個新線程,要求main線程打印100次“main”,新線程打印50次“new”。

3. 模擬三個老師同時發80份學習筆記本,每次只發放一份筆記本,每個老師相當於一個線程。

4. 編寫如圖6-1所示的界面,當程序運行時:

每文一語


 

 

一、實驗目的

1. 掌握Java多線程的創建及其啓動,多線程的兩種常用創建方式及其區別;

2. 掌握多線程的生命週期及五種基本狀態,分別是新建狀態(New)、就緒狀態(Runnable)、運行狀態(Running)、阻塞狀態(Blocked)、死亡狀態(Dead);

3. 掌握引起Java線程阻塞的主要方法,如:jion()方法、sleep()方法、yeild()方法;

4. 掌握線程安全及其解決機制,如:同步方法、同步代碼塊等。

二、實驗代碼

1. 通過繼承Thread類的方法創建兩個線程,在Thread構造方法中指定線程的名稱,並將這兩個線程的名字打印出來。

package 作業練習.test6;
public class Study_1 extends Thread {
    public Study_1(String name) {
        super(name);
    }
    public void run() {
        System.out.println(this.getName());
    }
    public static void main(String[] args) {
        new Study_1("Thread1").start();
        new Study_1("Thread2").start();
    }
}

2. 通過實現Runnable接口的方法創建一個新線程,要求main線程打印100次“main”,新線程打印50次“new”。

package 作業練習.test6;

public class Study_2 implements Runnable {
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.println("new");
        }
    }
    public static void main(String[] args) {
        new Thread(new Study_2()).start();
        for (int i = 0; i < 100; i++) {
            System.out.println("main");
        }
    }
}

3. 模擬三個老師同時發80份學習筆記本,每次只發放一份筆記本,每個老師相當於一個線程。

package 作業練習.test6;
public class Study_3 implements Runnable {
    private int number = 80;  //總共80份學習筆記
    private int count = 0;    //發第幾份
    @Override
    public void run() {
        while (true) {
            synchronized (this) {
                if (number <= 0) {
                    break;
                }
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                number--;
                count++;
                System.out.println(Thread.currentThread().getName() + "正在發第" + count + "份學習筆記,還有" + number + "份學習筆記。");
            }
        }
    }
    public static void main(String[] args) {
        Study_3 homeWork3 = new Study_3();
        new Thread(homeWork3, "老師甲").start();
        new Thread(homeWork3, "老師乙").start();
        new Thread(homeWork3, "老師丙").start();
    }
}

4. 編寫如圖6-1所示的界面,當程序運行時:

1)每隔兩秒鐘在顯示字母區域隨機顯示一個字母(如圖所示,顯示的字母是“g”);

2)用戶在文本框中使用輸入相應的字母,如果輸入正確則得1分,否則得0分;

3)並將用戶的得分累計顯示在的得分欄。

package 作業練習.test6;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.input.KeyCode;
import javafx.stage.Stage;

import java.awt.*;
import java.awt.event.KeyEvent;

public class Text4 extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        Label l1 = new Label("顯示字母:");
        TextField l2 = new TextField("A");
        l2.setEditable(false);
        l2.setPrefWidth(30.0);//文本框大小
        Label l3 = new Label("輸入所顯示的字母(回車)");
        TextField l4 = new TextField();
        Label l5 = new Label("得分");
        Label l6 = new Label("0");
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    char str;
                    str = (char)(Math.random()*26+'a');
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    String s = String.valueOf(str);
                    l2.setText(s);
                }
            }
        }).start();

        l4.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent e) {
                if (e.getCode()== KeyCode.ENTER){
                    String text1 = l2.getText();
                    String text2 = l4.getText();
                    String text3 = l6.getText();
                    int i = Integer.parseInt(text3);
                    if (text1.equals(text2)){
                        i+=1;
                        l6.setText(String.valueOf(i));

                    }
                }
                l4.clear();
            }
        });


        FlowPane flowPane = new FlowPane();    //添加面板
        flowPane.getChildren().addAll(l1,l2,l3,l4,l5,l6);    //吧空控件添加到面板上
        Scene scene = new Scene(flowPane);   //創建場景
        stage.setScene(scene);   //吧場景添加到舞臺
        stage.setWidth(900);
        stage.show();

    }
}

每文一語

有些東西,只有有了遺憾纔會懂得珍惜!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章