实验五 多线程程序设计(汽院含答案)
常熟理工学院 C语言程序设计实验实验指导书及答案汇总模板

项目 4.(选做)
5
6 《C 语言程序设计》实验指导书 常熟理工学院 电气与自动化工程学院
根据矩形面积的计算方法,编写一个输入圆半径 r,计算园周长 L 和圆面积 S 的程序。注意判断圆半径 r 是否大于零。 (程序代码和运行结果可写在指导书背面)
6
常熟理工学院 电气与自动化工程学院 《C 语言程序设计》实验指导书
运行结果:
项目 3.(选做) 在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的 一个鞍点。要求从键盘上输入一个二维数组,当鞍点存在时,把鞍点找出来。 (程序代码和运行结果可写在指导书背面)
运行结果:
项目 2. 字符统计 【项目说明】 有一篇文章,共有 3 行文字,每行 80 个字符。要求分别统计出其中英文字母和数字的个数。 【项目目的】 (1)掌握键盘输入字符串方法。 (2)掌握二维数组的处理方法。
12 《C 语言程序设计》实验指导书 常熟理工学院 电气与自动化工程学院
【技术要点】 (1)3 行文字可定义一个二维字符数组来表示。 (2)使用 gets( ) 函数对字符串进行输入。 程序代码:
2、用 do…while 和 break 语句实现的程序代码:
10 《C 语言程序设计》实验指导书 常熟理工学院 电气与自动化工程学院
3、用 do…while 和 continue 语句实现的程序代码:
) 求 (程序代码和运行结果可写在指导书背面) å n!(即求1!+ 2!+ 3!+ K + 10! )
项目 2. 调试并运行下面程序,并写出运行结果: #include <stdio.h> int main() { int a , b , sum; /*定义变量*/ a=23; b=56; /*为变量赋值*/ sum=a+b; /*计算两个变量的和*/ printf(“sum is %d\n”,sum); /*输出计算结果*/ return 0; } 运行结果:
多线程程序实验报告(3篇)

第1篇一、实验目的1. 理解多线程的概念和作用。
2. 掌握多线程的创建、同步和通信方法。
3. 熟悉Java中多线程的实现方式。
4. 提高程序设计能力和实际应用能力。
二、实验环境1. 操作系统:Windows 102. 开发工具:IntelliJ IDEA3. 编程语言:Java三、实验内容本次实验主要完成以下任务:1. 创建多线程程序,实现两个线程分别执行不同的任务。
2. 使用同步方法实现线程间的同步。
3. 使用线程通信机制实现线程间的协作。
四、实验步骤1. 创建两个线程类,分别为Thread1和Thread2。
```javapublic class Thread1 extends Thread {@Overridepublic void run() {// 执行Thread1的任务for (int i = 0; i < 10; i++) {System.out.println("Thread1: " + i);}}}public class Thread2 extends Thread {@Overridepublic void run() {// 执行Thread2的任务for (int i = 0; i < 10; i++) {System.out.println("Thread2: " + i);}}}```2. 创建一个主类,在主类中创建两个线程对象,并启动它们。
```javapublic class Main {public static void main(String[] args) {Thread thread1 = new Thread1();Thread thread2 = new Thread2();thread1.start();thread2.start();}```3. 使用同步方法实现线程间的同步。
```javapublic class SynchronizedThread extends Thread {private static int count = 0;@Overridepublic void run() {for (int i = 0; i < 10; i++) {synchronized (SynchronizedThread.class) {count++;System.out.println(Thread.currentThread().getName() + ": " + count);}}}}public class Main {public static void main(String[] args) {Thread thread1 = new SynchronizedThread();Thread thread2 = new SynchronizedThread();thread1.start();thread2.start();}```4. 使用线程通信机制实现线程间的协作。
Java 多线程编程练习题及答案

Java 多线程编程练习题及答案一、多线程基础概念在开始进行Java多线程编程练习之前,首先需要了解一些多线程的基础概念。
1. 什么是线程?线程是计算机进程中的一个执行序列,可以独立运行,并与其他线程并发执行。
一个线程可以执行一个任务,它拥有自己的栈、程序计数器和本地变量等。
2. 为什么要使用多线程?多线程可以提高程序的执行效率,特别是在处理多任务时。
通过将多个任务拆分成多个线程,可以同时执行这些任务,从而加快整体的执行速度。
3. 如何创建线程?在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。
通过继承Thread类,需要重写run方法来定义线程的执行逻辑;通过实现Runnable接口,则需要实现run方法,并将Runnable对象传递给Thread类进行线程的创建。
二、多线程编程练习题现在,我们来进行一些多线程编程练习题,以巩固对多线程概念和编程的理解。
1. 编写一个程序,创建两个线程并使它们交替输出1-100的数字。
提示:可以使用一个标志变量来判断当前是哪个线程在执行,并使用synchronized关键字来保证线程之间的同步。
2. 编写一个程序,创建三个线程A、B和C,使它们运行10次,每次分别输出A、B和C,并等待随机时间后继续执行下一次。
提示:可以使用Thread.sleep()方法来模拟线程等待的时间。
3. 编写一个程序,模拟银行存取款操作。
创建两个线程,一个线程负责存款,另一个线程负责取款。
初始银行账户余额为1000元,存款线程每次存100元,取款线程每次取200元,两个线程分别执行10次。
提示:可以使用wait()和notify()方法来实现线程之间的等待和唤醒操作。
三、多线程编程练习答案下面是上述多线程编程练习题的答案,供参考。
1.```public class AlternatePrinting implements Runnable {private static int count = 1;private static final Object lock = new Object();private final int threadId;private final int totalThreads;private final int maxCount;public AlternatePrinting(int threadId, int totalThreads, int maxCount) {this.threadId = threadId;this.totalThreads = totalThreads;this.maxCount = maxCount;}@Overridepublic void run() {while (true) {synchronized (lock) {if (count > maxCount) {break;}if (count % totalThreads == threadId - 1) {System.out.println("Thread " + threadId + ": " + count);count++;} else {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}lock.notifyAll();}}}public static void main(String[] args) {int totalThreads = 2;int maxCount = 100;for (int i = 1; i <= totalThreads; i++) {new Thread(new AlternatePrinting(i, totalThreads, maxCount)).start();}}}```2.```public class ABCPrinting implements Runnable { private static final Object lock = new Object();private static String turn = "A";private final String name;private final int maxPrints;public ABCPrinting(String name, int maxPrints) { = name;this.maxPrints = maxPrints;}@Overridepublic void run() {int prints = 0;while (prints < maxPrints) {synchronized (lock) {try {while (!turn.equals(name)) {lock.wait();}System.out.println(name);prints++;if (turn.equals("A")) {turn = "B";} else if (turn.equals("B")) {turn = "C";} else {turn = "A";}lock.notifyAll();Thread.sleep((long) (Math.random() * 1000)); } catch (InterruptedException e) {e.printStackTrace();}}}}public static void main(String[] args) {int maxPrints = 10;new Thread(new ABCPrinting("A", maxPrints)).start(); new Thread(new ABCPrinting("B", maxPrints)).start(); new Thread(new ABCPrinting("C", maxPrints)).start(); }}```3.```public class BankOperation {private static final Object lock = new Object();private static int balance = 1000;public static void main(String[] args) {int numDeposits = 10;int numWithdrawals = 10;Thread depositThread = new Thread(() -> {for (int i = 0; i < numDeposits; i++) {synchronized (lock) {balance += 100;System.out.println("Deposit: 100, balance: " + balance);lock.notifyAll();}}});Thread withdrawalThread = new Thread(() -> {for (int i = 0; i < numWithdrawals; i++) {synchronized (lock) {if (balance < 200) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}balance -= 200;System.out.println("Withdrawal: 200, balance: " + balance); }}});depositThread.start();withdrawalThread.start();}}```四、总结在本篇文章中,我们通过多线程编程练习题的方式掌握了Java多线程的基础概念和编程技巧。
c语言程序设计第五版习题答案解析

习题解析与答案第1章C语言概述一.简答题1.概述C语言的主要特点。
【解答】(1)语言简洁、紧凑,使用方便、灵活。
(2)数据类型丰富,表达能力强。
(3)运算符多样。
C语言中的运算符包含的范围非常广泛。
(4)具有结构化的控制语句。
如if…else语句、while语句、do while语句、switch 语句、for语句。
(5)允许直接访问物理地址。
C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。
(6)所生成的目标代码质量高,可移植性好。
2.构成C语言程序的基本单位是什么?它由哪几部分组成?【解答】函数是构成C语言程序的基本单位。
一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。
3.C语言程序的运行一般要经过哪几个步骤?【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。
二.运行程序写结果1.输入下面程序并运行。
main(){int a1,a2,x;a1=100;a2=50;x=a1-a2;printf(″x=%d\n″,x);}【解答】运行结果为:x=502.输入下面程序并运行。
main(){int a1,a2,x;a1=10;a2=20;x=a1*a2;printf(″a1=%d,a2=%d\n″,a1,a2);printf(″x=%d\n″,x);}【解答】运行结果为:a1=10,a2=20x=2003.输入下面程序并运行。
#include <stdio.h>main(){printf("******\n");printf(" *****\n");printf(" ****\n");printf(" ***\n");printf(" **\n");printf(" *\n");}【解答】运行结果为:*********************思考:可以修改程序,使之输出平行四边形,等腰三角形等图形。
多线程题目及答案

35. 并行和并发有什么区别?•并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
••并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
••在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。
如hadoop分布式集群。
•所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。
36. 线程和进程的区别?简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。
线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。
同一进程中的多个线程之间可以并发执行。
37. 守护线程是什么?守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程。
38. 创建线程有哪几种方式?①. 继承Thread类创建线程类•定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。
因此把run()方法称为执行体。
••创建Thread子类的实例,即创建了线程对象。
••调用线程对象的start()方法来启动该线程。
•②. 通过Runnable接口创建线程类•定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
••创建Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
••调用线程对象的start()方法来启动该线程。
•③. 通过Callable和Future创建线程•创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
••创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
浙江大学Java语言程序设计实验问题详解全集

Java答案全集实验汇总。
实验2 数据类型和变量的使用一、程序填空,在屏幕上显示一个短句“Programming in Java is fun!”import java.io.*;public class Test10001{public static void main(String args[]){/*------------------------*/System.out.println("Programming in Java is fun!");}}二、程序填空,在屏幕上显示如下网格。
+---+---+| | || | |+---+---+import java.io.*;public class Test10002{public static void main(String args[]){/*------------------------*/System.out.println("+---+---+");System.out.println("| | |");System.out.println("| | |");System.out.println("+---+---+");}}三、编写程序,在屏幕上显示如下图案。
(要求:第1行行首无空格,每行行尾无空格)* * * ** * ** **public class Test10003{public static void main(String args[]){/*------------------------*/System.out.println("* * * *");System.out.println(" * * *");System.out.println(" * *");System.out.println(" *");} }实验3 运算符和表达式的使用1、运行结果:m=2 k=1x=1.0 y=2.0 z=-3.0ch1=-A ch2=Ach1=-A ch2=aHello,Welcome to core Java!思考题:(1)字符'A'的Unicode码比字符'a'的Unicode码小32。
程序设计员实操考核中常见的多线程编程题解析

程序设计员实操考核中常见的多线程编程题解析引言在程序设计员的实操考核中,多线程编程题是非常常见的一种题型。
多线程编程可以提高程序的性能和响应能力,但也容易引发各种并发问题。
本文将对程序设计员实操考核中常见的多线程编程题进行解析,讨论解题思路和注意事项。
题目一:生产者消费者问题题目描述有一个缓冲区用于生产者和消费者之间的交互。
缓冲区的大小为N,其中N是一个大于0的整数。
生产者负责向缓冲区中生产产品,消费者负责从缓冲区中消费产品。
生产者和消费者都是并发执行的线程。
生产者在线程安全的情况下往缓冲区放入产品,如果缓冲区已满,则生产者需要等待。
消费者在线程安全的情况下从缓冲区取出产品,如果缓冲区为空,则消费者需要等待。
要求使用多线程编程实现生产者消费者问题的解决方案。
解题思路生产者消费者问题是一个经典的多线程同步问题,可以使用线程间的等待和通知机制来解决。
首先,我们可以使用一个共享变量count来记录缓冲区中的产品数量,初始值为0。
使用两个条件变量notEmpty和notFull来表示缓冲区是否为空和是否已满。
同时,我们还需要一个互斥锁mutex来保护对缓冲区的访问。
生产者线程在生产一个产品之前,首先需要获取mutex的锁,然后判断缓冲区是否已满。
如果缓冲区已满,则生产者需要等待notFull条件变量的通知;否则,生产者将产品放入缓冲区,产品数量加1,并通知消费者通过notEmpty条件变量。
最后,生产者释放mutex的锁。
消费者线程在消费一个产品之前,首先需要获取mutex的锁,然后判断缓冲区是否为空。
如果缓冲区为空,则消费者需要等待notEmpty条件变量的通知;否则,消费者从缓冲区中取出一个产品,产品数量减1,并通知生产者通过notFull条件变量。
最后,消费者释放mutex的锁。
注意事项在实现生产者消费者问题的解决方案时,需要注意以下几点:1.同步机制:使用互斥锁和条件变量来保证线程的同步和互斥访问。
C实验报告5参考答案

《高级语言程序设计》实验报告班级: 学号: 姓名: 成绩:实验5 循环结构程序设计一、实验目的1.掌握循环结构程序设计的3种控制语句——while 语句、do ···while 语句、for 语句的使用方法。
2.了解用循环的方法实现常用的算法设计。
二、实验内容1(1)下列程序的功能为:求1~100之和(和值为5050)并输出。
纠正程序中存在的错误,以实现其功能。
程序以文件名sy5_1.c 保存。
#include <stdio.h>main(){int i,sum=0; i=1;while(i<100) while(i<=100) sum=sum+i; { sum=sum+i; i++; i++;} printf(“The sum from 1 to 100 is %d\n ”,sum); }(2)下列程序的功能为:倒序打印26个英文字母。
纠正程序中存在的错误,以实现其功能,程序以文件名sy5_2.c 保存。
#include <stdio.h> main() {char x; x='z';while(x!='a') while(x!='a'-1)或while(x >='a') {printf("%3d",x); printf("%3c ",x); x++;x - -; }}(3)下列程序的功能为:输入一个大写字母,打印出一个菱形。
该菱形中间一行由此字母组成,其相邻的上下两行由它前面的一个字母组成,按此规律,直到字母A 出现在第一行和最末行为止。
纠正程序中存在的错误,以实现其功能。
程序以文件名sy5_3.c 保存。
例如,输入字母D ,打印出如下图形:#include <stdlib.h> main() { int i,j,k; char ch; scanf("%c",&ch); k=ch-'A'+1; for (i=1;i<=k;i++) {for (j=20;j>=i;j--)printf("%c",' ');for (j=1;j<=i-1;j++) for (j=1;j<=2*i-1;j++) printf("%c",'A'+i-1); printf("\n"); }k=ch-'A';for (i=k;i>=1;i--){ for (i=20;i>=i;i--) for (j =20;j >=i;j --) printf("%c",' ');for (j=1;j<2*i-1;j++) for (j=1;j <=2*i-1;j++) printf("%c",'A'+i-1); printf("\n"); }}2.程序填空题(1)用辗转相除法求两个正整数的最大公约数和最小公倍数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五多线程程序设计实验目的1.掌握Java语言中多线程编程的基本方法2.掌握Runnable接口实现多线程的方法3.掌握Thread类实现多线程的用法实验导读1.进程和线程的概念进程是程序一次动态执行的过程,对应从代码加载、执行到执行结束这样一个完整的过程,也是进程自身从产生、发展到消亡的过程。
线程是比进程更小的执行单元,一个进程在执行过程中,可以产生多个线程。
每个线程都有自身的产生、执行和消亡的过程。
2.线程的状态与生命周期●新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。
此时它已经有了相应的内存空间和其他资源。
●运行:线程创建之后就具备了运行的条件,一旦轮到它来享用CPU资源时,即JVM将CPU使用权切换给该线程时,此线程的就可以脱离创建它的主线程独立开始自己的生命周期了(即run方法执行的过程)。
●中断:有4种原因的中断,CPU资源从当前线程切换给其他线程、执行了sleep(int millsecond)方法、执行了wait()方法、进入阻塞状态。
●死亡:run方法结束。
3.线程的创建在Java语言中,与线程支持密切相关的是ng.Thread类和ng.Runnable接口。
Runnable接口定义很简单,只有一个run方法。
任何一个类如果希望自己的实例能够以线程的形式执行,都可以来实现Runnable接口。
继承Thread类和实现Runnable接口,都可以用来创建Thread对象,效果上并没有什么不同。
继承Thread 类的方法很明显的缺点就是这个类不能再继承其他的类了,而实现Runnable接口不会有这个麻烦。
另外,在继承Thread类的代码中,this其实就是指当前正在运行的线程对象,如果使用实现Runnable 接口的方式,要得到当前正在执行的线程,需要使用Thread.currentThread()方法。
线程创建后仅仅是占有了内存资源,在JVM管理的线程中还没有这个线程,此线程必须调用start()方法(从父类继承的方法)通知JVM,这样JVM就会知道又有一个新一个线程排队等候切换了。
注意:多次启动一个线程,或者启动一个已经运行的线程对象是非法的,会抛出IllegalThreadStateException异常对象。
4.线程的优先级同一时刻在等待队列中的线程会有很多个,它们各自任务的重要性有所不同。
为了加以区分,使工作安排和资源分配时间更为合理,每个线程可以被赋予不同的优先级,让任务比较急的线程拥有更高的优先级,从而更快地进入执行状态。
Java中提供了10个等级的线程优先级,最低为Thread.MIN_PRIORITY=1,最高为Thread.MAX_PRIORITY=10,默认优先级为Thread.NORM_PRIORITY=5。
使用Thread类中的setPriority(int)方法可以为线程指定优先级。
5.线程的常用方法●start() 方法:线程调用该方法将启动线程,使之从新建状态进入就绪队列排队,一旦轮到它来享用CPU资源时,就可以脱离创建它的线程独立开始自己的生命周期了。
●run()方法:Thread类的run()方法与Runnable接口中的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作,都是系统自动调用而用户程序不得引用的方法。
系统的Thread类中,run()方法没有具体内容,所以用户程序需要创建自己的Thread类的子类,并重写run()方法来覆盖原来的run()方法。
当run 方法执行完毕,线程就变成死亡状态。
●sleep(int millsecond) 方法:现程占有CPU期间,执行sleep方法来使自己放弃CPU资源,休眠一段时间。
休眠时间的长短由sleep 方法的参数决定,millsecond是毫秒为单位的休眠时间。
如果线程在休眠时被打断,JVM就抛出InterruptedException异常。
因此,必须在try~catch语句块中调用sleep方法。
●isAlive() 方法:线程处于“新建”状态时,线程调用isAlive()方法返回false。
当一个线程调用start()方法,并占有CUP资源后,该线程的run方法就开始运行,在线程的run方法结束之前,即没有进入死亡状态之前,线程调用isAlive()方法返回true。
当线程进入“死亡”状态后(实体内存被释放),线程仍可以调用方法isAlive (),这时返回的值是false。
一个已经运行的线程在没有进入死亡状态时,不要再给线程分配实体,由于线程只能引用最后分配的实体,先前的实体就会成为“垃圾”,并且不会被垃圾收集机收集掉。
●currentThread() 方法:currentThread()方法是Thread类中的类方法,可以用类名调用,该方法返回当前正在使用CPU资源的线程。
●interrupt() 方法:intertupt方法经常用来“吵醒”休眠的线程。
当一些线程调用sleep方法处于休眠状态时,一个占有CPU 资源的线程可以让休眠的线程调用interrupt 方法“吵醒”自己。
6.线程的同步线程同步是指几个线程都需要调用一个同步方法(使用关键字synchronized修饰的方法) 。
当一个线程A使用一个synchronized修饰的方法时,其他线程想使用这个方法时就必须等待,直到线程A 使用完该方法(除非线程A使用wait主动让出CPU资源)。
一个线程在使用的同步方法中时,可能根据问题的需要,必须使用wait()方法使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。
其它线程如果在使用这个同步方法时如果不需要等待,那么它用完这个同步方法的同时,应当执行notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。
●挂起:有时候两个线程并不是同步的,即不涉及都需要调用一个同步方法,但线程也可能需要暂时的挂起。
所谓挂起一个线程就是让线程暂时让出CPU的使用权限,暂时停止执行,但停止执行的持续时间不确定,因此不能使用sleep方法暂停线程。
挂起一个线程需使用wait方法,即让准备挂起的线程调用wait 方法,主动让出CPU的使用权限.●恢复:为了恢复该线程,其它线程在占有CUP资源期间,让挂起的线程的目标对象执行notifyAll()方法,使得挂起的线程继续执行;如果线程没有目标对象,为了恢复该线程,其它线程在占有CUP资源期间,让挂起的线程调用notifyAll()方法,使挂起的线程继续执行。
实验内容1.汉字识别程序编写一个Java应用程序,在主线程中再创建一个Frame类型的窗口,在该窗口中再创建一个线程giveWord。
线程giveWord每隔6秒钟给出一个汉字,用户使用一种汉字输入法将该汉字输入到文本框中。
请按模板要求,将代码补充完整。
WordThread.javaimport java.awt.*;public class WordThread extends Thread {char word;Label com;WordThread(Label com) { = com;}public void run() {while (true) {word = (char) (Math.random()*(29968-19968)+19968);System.out.println(word);com.setText("" + word);try {【补充代码】// 调用sleep方法使得线程中断6000豪秒} catch (InterruptedException e) {}}}}ThreadFrame.javapublic class ThreadFrame extends Frame implements ActionListener { Label wordLabel;Button button;TextField inputText, scoreText;【补充代码】// 用WordThread声明一个giveWord对象int score = 0;ThreadFrame() {wordLabel = new Label(" ", Label.CENTER);wordLabel.setFont(new Font("", Font.BOLD, 72));button = new Button("开始");inputText = new TextField(3);scoreText = new TextField(5);scoreText.setEditable(false);【补充代码】// 创建giveWord,将wordLabel传递给WordThread构造方法的参数button.addActionListener(this);inputText.addActionListener(this);add(button, BorderLayout.NORTH);add(wordLabel, BorderLayout.CENTER);Panel southP = new Panel();southP.add(new Label("输入标签所显示的汉字后回车:"));southP.add(inputText);southP.add(scoreText);add(southP, BorderLayout.SOUTH);setBounds(100, 100, 350, 180);setVisible(true);validate();addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public void actionPerformed(ActionEvent e) {if (e.getSource() == button) {if (!(【补充代码】)) // giveWord调用方法isAlive(){giveWord = new WordThread(wordLabel);}try {【补充代码】// giveWord调用方法start()} catch (Exception exe) {}} else if (e.getSource() == inputText) {if (inputText.getText().equals(wordLabel.getText())) { score++;}scoreText.setText("得分:" + score);inputText.setText(null);}}}WordThread.javapublic class ThreadWordMainClass {public static void main(String args[]) {new ThreadFrame();}}2.双线程接力编写一个应用程序,除了主线程外,还有两个线程:first和second。