Java多线程

举报
王小王-123 发表于 2021/01/24 22:54:44 2021/01/24
3.8k+ 0 0
【摘要】 目录 一、实验目的 二、实验代码 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构造方法中指定线程的名称,并将这两个线程的名字打印出来。


      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

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

    全部回复

    上滑加载中

    设置昵称

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

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

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