Java多线程

举报
王小贰 发表于 2021/01/22 15:44:07 2021/01/22
【摘要】 一、实验目的1. 掌握Java多线程的创建及其启动,多线程的两种常用创建方式及其区别;2. 掌握多线程的生命周期及五种基本状态,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、死亡状态(Dead);3. 掌握引起Java线程阻塞的主要方法,如:jion()方法、sleep()方法、yeild()方法;4. 掌握线程安全及其解决机...

一、实验目的

1. 掌握Java多线程的创建及其启动,多线程的两种常用创建方式及其区别;

2. 掌握多线程的生命周期及五种基本状态,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、死亡状态(Dead);

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

4. 掌握线程安全及其解决机制,如:同步方法、同步代码块等。

二、实验代码

1. 通过继承Thread类的方法创建两个线程,在Thread构造方法中指定线程的名称,并将这两个线程的名字打印出来。


  1. package 作业练习.test6;

  2. public class Study_1 extends Thread {

  3. public Study_1(String name) {

  4. super(name);

  5. }

  6. public void run() {

  7. System.out.println(this.getName());

  8. }

  9. public static void main(String[] args) {

  10. new Study_1("Thread1").start();

  11. new Study_1("Thread2").start();

  12. }

  13. }

2. 通过实现Runnable接口的方法创建一个新线程,要求main线程打印100次“main”,新线程打印50次“new”。


  1. package 作业练习.test6;



  2. public class Study_2 implements Runnable {

  3. public void run() {

  4. for (int i = 0; i < 50; i++) {

  5. System.out.println("new");

  6. }

  7. }

  8. public static void main(String[] args) {

  9. new Thread(new Study_2()).start();

  10. for (int i = 0; i < 100; i++) {

  11. System.out.println("main");

  12. }

  13. }

  14. }

3. 模拟三个老师同时发80份学习笔记本,每次只发放一份笔记本,每个老师相当于一个线程。


  1. package 作业练习.test6;

  2. public class Study_3 implements Runnable {

  3. private int number = 80; //总共80份学习笔记

  4. private int count = 0; //发第几份

  5. @Override

  6. public void run() {

  7. while (true) {

  8. synchronized (this) {

  9. if (number <= 0) {

  10. break;

  11. }

  12. try {

  13. Thread.sleep(500);

  14. } catch (InterruptedException e) {

  15. e.printStackTrace();

  16. }

  17. number--;

  18. count++;

  19. System.out.println(Thread.currentThread().getName() + "正在发第" + count + "份学习笔记,还有" + number + "份学习笔记。");

  20. }

  21. }

  22. }

  23. public static void main(String[] args) {

  24. Study_3 homeWork3 = new Study_3();

  25. new Thread(homeWork3, "老师甲").start();

  26. new Thread(homeWork3, "老师乙").start();

  27. new Thread(homeWork3, "老师丙").start();

  28. }

  29. }

4. 编写如图6-1所示的界面,当程序运行时:

1)每隔两秒钟在显示字母区域随机显示一个字母(如图所示,显示的字母是“g”);

2)用户在文本框中使用输入相应的字母,如果输入正确则得1分,否则得0分;

3)并将用户的得分累计显示在的得分栏。


  1. package 作业练习.test6;



  2. import javafx.application.Application;

  3. import javafx.event.EventHandler;

  4. import javafx.scene.input.KeyCode;

  5. import javafx.stage.Stage;



  6. import java.awt.*;

  7. import java.awt.event.KeyEvent;



  8. public class Text4 extends Application {



  9. public static void main(String[] args) {

  10. launch(args);

  11. }



  12. @Override

  13. public void start(Stage stage) {

  14. Label l1 = new Label("显示字母:");

  15. TextField l2 = new TextField("A");

  16. l2.setEditable(false);

  17. l2.setPrefWidth(30.0);//文本框大小

  18. Label l3 = new Label("输入所显示的字母(回车)");

  19. TextField l4 = new TextField();

  20. Label l5 = new Label("得分");

  21. Label l6 = new Label("0");

  22. new Thread(new Runnable() {

  23. @Override

  24. public void run() {

  25. while(true){

  26. char str;

  27. str = (char)(Math.random()*26+'a');

  28. try {

  29. Thread.sleep(2000);

  30. } catch (InterruptedException e) {

  31. e.printStackTrace();

  32. }

  33. String s = String.valueOf(str);

  34. l2.setText(s);

  35. }

  36. }

  37. }).start();



  38. l4.setOnKeyPressed(new EventHandler<KeyEvent>() {

  39. @Override

  40. public void handle(KeyEvent e) {

  41. if (e.getCode()== KeyCode.ENTER){

  42. String text1 = l2.getText();

  43. String text2 = l4.getText();

  44. String text3 = l6.getText();

  45. int i = Integer.parseInt(text3);

  46. if (text1.equals(text2)){

  47. i+=1;

  48. l6.setText(String.valueOf(i));



  49. }

  50. }

  51. l4.clear();

  52. }

  53. });





  54. FlowPane flowPane = new FlowPane(); //添加面板

  55. flowPane.getChildren().addAll(l1,l2,l3,l4,l5,l6); //吧空控件添加到面板上

  56. Scene scene = new Scene(flowPane); //创建场景

  57. stage.setScene(scene); //吧场景添加到舞台

  58. stage.setWidth(900);

  59. stage.show();



  60. }

  61. }

每文一语

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。