Java 多线程基础实战解析:Thread类与线程创建
一、原题完整代码呈现
以下是计算机二级Java考试中关于多线程创建与运行的典型题型,主要考察线程类继承、main方法参数及线程方法调用,包含3处需要填写的空白(标记为//*********Found**********
):
public class Java_1
{
//*********Found**********
public static void main (_________________ args[])
{
new SimpleThread("第1").start();
new SimpleThread("第2").start();
}
}
//*********Found**********
class SimpleThread extends ________________
{
public SimpleThread(String str)
{
super(str);
}
public void run()
{
for (int i = 0; i < 5; i++)
{
//*********Found**********
System.out.println(i + " " + ______________());
try
{
sleep((int)(2 * 100));
}
catch (InterruptedException e)
}
System.out.println("运行! " + getName());
}
}
二、空白处逐一解析与解答
1. 第一处空白:main方法的参数类型
答案:String
//*********Found**********
public static void main (String args[])
解析:
Java程序入口main
方法的参数固定为String
类型的数组(String[] args
),用于接收命令行参数。此处需声明参数类型为String
,因此填写String
。
2. 第二处空白:线程类继承的父类
答案:Thread
//*********Found**********
class SimpleThread extends Thread
解析:
创建线程的常用方式之一是继承Thread
类,并重写其run
方法(线程执行体)。代码中SimpleThread
的构造方法调用了super(str)
,而Thread
类有一个接收字符串参数的构造方法(用于设置线程名),因此SimpleThread
需继承Thread
类,填写Thread
。
3. 第三处空白:获取线程名称的方法
答案:getName
//*********Found**********
System.out.println(i + " " + getName());
解析: Thread
类提供getName()
方法用于获取线程的名称(通过构造方法super(str)
设置)。此处需要打印当前线程的名称,因此调用getName()
方法,填写getName
。
三、完整正确代码
四、程序功能与运行说明
程序功能
该程序通过继承Thread
类创建多线程,核心功能包括:
- 定义
SimpleThread
类继承Thread
,重写run
方法(线程执行逻辑) - 在
run
方法中循环5次,打印当前计数和线程名称,每次循环休眠200毫秒 main
方法创建两个SimpleThread
实例(线程名分别为"第1"和"第2"),并启动线程
运行说明
- 线程启动:
main
方法中调用start()
方法启动线程(而非直接调用run()
,start()
会触发JVM调用run()
,实现并发执行) 执行过程:
- 两个线程并发执行,交替打印计数和线程名(顺序不确定,取决于CPU调度)
- 每次循环后线程休眠200毫秒,模拟耗时操作
- 循环结束后打印"运行! 线程名"
示例输出(顺序可能不同):
0 第1 0 第2 1 第1 1 第2 2 第1 2 第2 3 第1 3 第2 4 第1 4 第2 运行! 第1 运行! 第2
五、核心知识点总结
线程创建方式:继承Thread类
步骤:
- 定义类继承
Thread
类 - 重写
run()
方法(线程执行体,包含线程要完成的逻辑) - 创建子类实例,调用
start()
方法启动线程(而非直接调用run()
,否则为普通方法调用,不并发)
- 定义类继承
- 特点:实现简单,但受限于Java单继承(子类无法再继承其他类)
Thread类的关键方法
Thread(String name)
:构造方法,设置线程名称getName()
:返回线程名称start()
:启动线程,JVM会自动调用run()
方法sleep(long millis)
:使当前线程休眠指定毫秒数(静态方法,作用于当前线程),可能抛出InterruptedException
需捕获
线程并发特性
- 多线程启动后,执行顺序由CPU调度决定,具有不确定性(每次运行输出顺序可能不同)
- 休眠(
sleep
)会释放CPU资源,让其他线程有机会执行,体现并发效果
main方法的参数
- 固定格式:
public static void main(String[] args)
,args
为字符串数组,用于接收命令行传入的参数 - 即使不使用参数,也必须保持该声明格式,否则JVM无法识别程序入口
- 固定格式:
六、常见错误与应试技巧
常见错误分析
- 第一处空白参数类型错误:写成
int
(与main方法标准参数类型不符)或String[]
(语法错误,参数声明格式为类型 变量名
,而非类型[] 变量名
在括号内) - 第二处空白继承类错误:写成
Runnable
(接口,需用implements
而非extends
)或其他类(不具备线程功能) - 第三处空白方法调用错误:写成
getname()
(方法名大小写错误,Java区分大小写)或name
(Thread
类无公共name
成员变量,需通过getName()
获取)
- 第一处空白参数类型错误:写成
应试技巧
- 线程创建口诀:"继承Thread类,重写run方法,start启动线程,并发执行靠它"
- 方法调用:"线程名称getName,sleep休眠要捕获异常,start启动别直接call run"
- 并发理解:"多线程启动后,执行顺序不确定,CPU调度是核心"
- 调试技巧:通过
sleep
延长线程执行时间,更明显地观察并发交替效果
通过本题,我们掌握了继承Thread
类创建线程的基本方法、Thread
类的核心API(getName()
、sleep()
)及线程并发执行的特性。多线程是实现程序并发执行的基础,理解其创建与运行机制对开发高性能应用具有重要意义。