一、实验目的
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; //发第几份 -
-
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); -
} -
-
-
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() { -
-
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>() { -
-
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(); -
-
} -
}
每文一语
有些东西,只有有了遗憾才会懂得珍惜!
评论(0)