Java多线程
【摘要】 目录
一、实验目的
二、实验代码
1. 通过继承Thread类的方法创建两个线程,在Thread构造方法中指定线程的名称,并将这两个线程的名字打印出来。
2. 通过实现Runnable接口的方法创建一个新线程,要求main线程打印100次“main”,新线程打印50次“new”。
3. 模拟三个老师同时发80份学习笔记本,每次只发放一份笔记本,每个老师相当于一个线程...
目录
1. 通过继承Thread类的方法创建两个线程,在Thread构造方法中指定线程的名称,并将这两个线程的名字打印出来。
2. 通过实现Runnable接口的方法创建一个新线程,要求main线程打印100次“main”,新线程打印50次“new”。
3. 模拟三个老师同时发80份学习笔记本,每次只发放一份笔记本,每个老师相当于一个线程。
一、实验目的
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,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_47723732/article/details/112951159
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)