Java多线程

举报
王小王-123 发表于 2021/05/26 16:12:44 2021/05/26
【摘要】 目录 一、实验目的 二、实验代码 1. 通过继承Thread类的方法创建两个线程,在Thread构造方法中指定线程的名称,并将这两个线程的名字打印出来。 2. 通过实现Runnable接口的方法创建一个新线程,要求main线程打印100次“main”,新线程打印50次“new”。 3. 模拟三个老师同时发80份学习笔记本,每次只发放一份笔记本,每个老师相当于一个线程...

目录

一、实验目的

二、实验代码

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构造方法中指定线程的名称,并将这两个线程的名字打印出来。


  
  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. }

每文一语

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

文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:wxw-123.blog.csdn.net/article/details/112951159

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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