限时问题抢答小程序(java、头歌实验)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
题目:
实现流程
相关知识
进程和线程
注意事项:
文件、包位置(路径)
代码:
.java文件
.java文件
效果截图:
总结
题目:
限时问题抢答小程序功能概述:三个人在给定的时间内限时抢答给定的多道题目,每道题目限时 2000 ms。每道题目只能被一个人抢答,抢答者答对得 20 分,答错扣 10 分,没抢到题目的人既不扣分也不得分。 要实现限时抢答,我们需要解决以下问题:
实现流程 相关知识 进程和线程
进程是指在操作系统中正在运行的一个应用程序(比如运行的 QQ、微信、电脑管家等),线程是指进程内独立执行某个任务的一个单元(比如电脑管家的清理垃圾、电脑加速等)。
创建线程的方式
创建线程示例: 定义 类实现 接口。
public class ThreadTest implements Runnable { // 定义类实现Runnable接口// 重写Runnable接口的run方法@Overridepublic void run() {// 线程执行体for(int i=0;i<5;i++){// 输出线程名System.out.println(Thread.currentThread().getName());} }
}
// 创建对象
public static void main(String[] args) throws IOException, ClassNotFoundException {// 创建ThreadTest对象ThreadTest threadTest = new ThreadTest();// 将ThreadTest对象作为参数创建Thread对象Thread thread = new Thread(threadTest);// 启动线程thread.start(); }
执行结果:
线程安全
线程安全是什么:线程安全是指多个线程在执行同一段代码(代码中有共享变量)的时候采用加锁机制,使每次的执行结果和单线程执行的结果是一样的,不存在执行结果的二义性。线程不安全就是不提供加锁机制保护,有可能出现多个线程先后更改数据,造成所得到的数据是脏数据。 实现线程安全的三种方式:
同步代码块格式:
synchronized(锁对象)
{
// 可能出现线程安全问题的代码(访问了共享数据的代码)
}
同步代码的应用实例:
public class ThreadTest implements Runnable { // 定义类实现Runnable接口// 定义一个锁对象Object obj=new Object();// 重写run方法@Overridepublic void run() {// 同步代码块synchronized (obj){ // 可能出现线程安全的代码}}
注意事项:
1.同步代码块中的锁对象,可以使用任意的对象;
2.必须保证多个线程使用的锁对象是同一个;
3.锁对象的作用是把同步代码块锁住,只让一个线程在同步代码块中执行。
文件、包位置(路径)
其中,step是Java项目,step1是包,.java为主类,.java为测试类。
代码: .java文件
package step1;import java.util.Random;
import java.util.Scanner;
public class MyThread implements Runnable{// 获取给定限时时间Scanner scanner = new Scanner(System.in); Long time= scanner.nextLong();// 请在Begin-End间编写代码/********** Begin **********/// 定义变量Long endtime; // 答题结束时间int n=1; // 题目编号int zsscore=0; // 张三分数int lsscore=0; // 李四分数int wwscore=0; // 王五分数// 创建锁对象、计算答题开始时间以及题目个数Object obj=new Object(); // 创建锁对象Long starttime = System.currentTimeMillis();Long num=time-2000*2; // 题目个数// 重写run方法,输出每道题分别被谁抢到了,抢到的人答题是否正确以及当前所有人的得分@Overridepublic void run() {long endtime = starttime + 1000; // 确保初次循环结束时间大于起始时间while(endtime-starttime
.java文件
package step1;
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class FileTest {public static void main(String[] args) throws IOException, ClassNotFoundException {// 请在Begin-End间编写代码/********** Begin **********/// 创建MyThread对象,启动三个线程模拟三人作答MyThread myThread = new MyThread();Thread people = new Thread(myThread);people.setName("张三"); // 给线程命名Thread people1 = new Thread(myThread);people1.setName("李四");Thread people2 = new Thread(myThread);people2.setName("王五");people.start(); // 启动线程people1.start();people2.start();/********** End **********/}
}
效果截图:
提示:
题数=(输入的数值)/2000;前面.java定义好的。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了限时问题抢答小程序功能概述和代码实现。