java中同时创建多个窗口6_实验六 Java多线程

目录

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() {

@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();

}

}

每文一语

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值