一、线程的简介
线程是程序执行流的最小单元,一个进程可以包括多个线程,各个线程之间可以并行,也可以互相影响。每一个进程都至少有一个线程。
二、创建并使用线程
在java中,线程(Thread)是继承自Object,在java.lang.Thread中被声明。想要使用进程的话,首先要保证类继承了Thread类。
创建并使用线程可以有多种方法。
1.直接创建一个Thread实例
Thread thread = new Thread();
//要使得进程开始,使用thread.start();
然而进程默认的run()方法为空,因此此时,由于没有重写thread.run()方法,进程被创建之后便会静默退出,什么也没有做。
要想让进程执行相应的操作,就要重写thread.run();
Thread thread = new Thread() {
@Override
publicvoid run() {
//重写run方法,并且输出Thread1 act!
System.out.println("Thread1 act!");
}
};
thread.start();//进程开始
输出结果为:
Thread1 act!
该方法是最简单的创建进程的办法,不需要额外的类文件。
2.自定义进程类
创建一个类文件,并且使其继承Thread类,随后重写run方法即可。
publicclassTestThread extendsThread{
@Override
publicvoid run() {
System.out.println("Thread2 act!");
}
}
在创建该进程的时候,实例化该进程对象,并且使用start即可。
TestThread testThread = new TestThread();
testThread.start();
输出结果为(包含之前的代码运行):
Thread1 act!
Thread2 act!
该方法可以自定义各种进程类,当需要让多个进程执行不同操作的时候,这种方法可以大大减少工作量。
3.使用Runnable接口
Runnable是在java.lang.Runnable中被声明的接口,可以通过自定义类来实现它。
同样,需要创建进程时实例化一个Thread对象,但是这一次,还要传入一个Runnable接口的实现类。
publicclassTestRunnable implements Runnable{
@Override
publicvoid run() {
System.out.println("Thread3 act!");
}
}
同样的,重写run方法。
在创建进程时,将自定义的Runnable类传入。
Thread thread3 = new Thread(new TestRunnable());
thread3.start();
输出内容为(包括之前的代码运行):
Thread1 act!
Thread2 act!
Thread3 act!
该方法避免了创建多个进程类,也同样能够实现多线程执行不同的操作。相比前者,因为自定义的类是实现了Runnable,因此仍然可以从其他类继承,从而使得灵活性更加高。
三、使用需知
1.不能够直接调用run()方法
创建线程后,使用start()方法就可以使得该线程开始,而run()方法也会被自动调用。
但是,倘若直接调用run()方法,虽然也会进行相应的操作,但是实际上是在当前的线程内进行的,并没有使用新创建的线程。
2.线程的结束
在线程的run()方法运行完之后,线程便会自动退出,每个线程的run方法一般只会运行一次,而不是一直反复调用。