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)