文章目录
一、查询API帮助文档
先来打开 API帮助文档
,来查一查这个 Thread
到底是什么。
下面介绍的意思就是:Thread
就表示Java中的一个线程,如果你想拥有一条线程的话,就可以创建它的对象,并开启它就行了。
创建新执行线程有两种方法。一种方法是将类声明为 Thread
的子类。该子类应重写 Thread
类的 run
方法。接下来可以分配并启动该子类的实例(也就是说接下来可以创建该子类的对象)。例如,计算大于某一规定值的质数的线程可以写成: 。
即自己写一个类,然后继承 Thread
,在这里它定义了一个成员变量,这个成员变量就是用来进行判断的。
但是如果我不想做这么复杂的逻辑,我只想打印一些输出语句。
那么上面的成员变量和构造方法都不需要写,直接重写 run()
即可。
在 run()
中书写当前线程要执行的代码。
这个类书写完后,继续往下开:我们就可以创建并启动一个线程。
创建这个类的对象,然后调用 start()
,就可以开启这条线程了。
在开启完后,它就会自动的去找这个类里面的 run()
,执行 run()
里面的代码。
二、代码示例
线程的第一种启动方式:
1. 自己定义一个类继承Thread。
Thread是Java已经定义好的,它就表示是一个线程。那我自己写的这个类继承Thread类,那我自己写的这个类也应该表示一个线程,因为是它的子类。
2. 重写run方法
3. 创建子类的对象,并启动线程
方法介绍
方法名 | 说明 |
---|---|
void run() | 在线程开启后,此方法将被调用执行 |
void start() | 使此线程开始执行,Java虚拟机会调用run方法() |
自己定义一个类继承Thread,并重写run方法
public class MyThread extends Thread{
@Override
public void run() {
//书写线程要执行代码
//这里想让它打印100次HelloWorld
for (int i = 0; i < 100; i++) {
System.out.println(getName() + "HelloWorld");
}
}
}
创建子类的对象
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
此时我们不能直接去调用 run()
,例如 t1.run()
,如果这么干,那么就仅仅只是调用一个方法,跟我们之前创建对象调方法是一模一样的。
这里应该调用 start()
,才表示开启线程。
//这里给两个线程起个名字,用于区分两条线程
t1.setName("线程1");
t2.setName("线程2");
t1.start();
t2.start();
启动程序,此时就能看见我们的程序一会执行第一条线程,一会执行第二条线程,可以发现是两个线程交织在一起,交替执行的。