线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务。线程一般可分为以下几种类型:
主线程
程序启动时,操作系统会创建一个进程,与此同时会立即运行一个线程,该线程通常被称为主线程。
主线程的作用主要有两个,一个是产生其他子线程,另一个是最后执行各种关闭操作,例如文件的关闭。
子线程
程序中创建的其他线程。
守护线程(后台线程)
守护线程是在后台为其它线程提供服务的线程,它独立于程序,不会因程序的终止而结束。当进程中只剩下守护线程时,进程直接退出。
前台线程
相对于守护线程的其它线程称为前台线程。
线程的创建和使用
创建线程的方法
继承Thread类
创建一个继承自Thread类的子类,并重写run()方法,然后创建该子类的实例并调用start()方法来启动线程。
实现Runnable接口
创建一个实现Runnable接口的类,并重写run()方法,然后创建该Runnable实例并将其作为参数传递给Thread类的构造方法,最后调用Thread实例的start()方法来启动线程。
使用线程池
通过线程池来管理和复用线程,可以更高效地利用系统资源。
线程的常用方法
start():启动线程,使其进入就绪状态。
run():线程的主体,包含线程要执行的操作。
wait():使当前线程等待,直到其他线程调用notify()或notifyAll()方法。
notify():唤醒在此对象监视器上等待的单个线程。
notifyAll():唤醒在此对象监视器上等待的所有线程。
线程同步
线程同步是为了防止多个线程同时访问共享资源时出现数据不一致的问题。常用的同步方法包括:
synchronized关键字:用于修饰方法或代码块,确保同一时间只有一个线程可以执行被synchronized修饰的代码。
Lock接口:通过显式锁定对象来实现线程同步。
线程状态
线程在其生命周期中会经历不同的状态,包括:
新建(NEW):线程已创建但尚未启动。
可运行(RUNNABLE):线程正在操作系统调度下执行,但可能正在等待CPU资源。
阻塞(BLOCKED):线程正在等待监视器锁,以便进入同步代码块或方法。
等待(WAITING):线程无限期等待另一个线程执行特定操作。
超时等待(TIMED_WAITING):线程等待另一个线程执行特定操作,但有一个超时时间。
终止(TERMINATED):线程已经执行完毕或因异常而终止。
通过以上信息,可以根据具体需求选择合适的线程划分方式,并合理使用线程同步机制来确保线程安全。