实验六 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();

    }
}

每文一语

有些东西,只有有了遗憾才会懂得珍惜!

猜你喜欢

转载自blog.csdn.net/weixin_47723732/article/details/112951159