📅  最后修改于: 2023-12-03 15:16:38.500000             🧑  作者: Mango
在Java中,线程是一种轻量级的执行单元,可以同时执行多个线程的程序称为多线程程序。Java线程给程序员提供了一些方法来同时运行多条线程。
Java提供了两种方式来创建线程:
定义一个类,继承 Thread 类,并覆盖 run() 方法。
class MyThread extends Thread {
public void run() {
// 线程执行的代码
}
}
然后通过创建 MyThread 的实例来启动该线程。
MyThread myThread = new MyThread();
myThread.start();
实现 Runnable 接口,并覆盖 run() 方法。Runnable 接口实现类需要创建 Thread 对象并调用 start() 方法来启动该线程。
class MyRunnable implements Runnable {
public void run() {
// 线程执行的代码
}
}
MyRunnable myRunnable= new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
线程生命周期包括五个状态:
新建(New):当线程对象被创建时,线程处于新建状态。
就绪(Runnable):当调用 start() 方法时,新建的线程进入就绪状态。就绪状态的线程在等待 CPU 调度器(Scheduler)的调度。
运行(Running):当线程被调度后,处于执行状态。线程执行 run() 方法中的代码。
阻塞(Blocked):线程在执行过程中遇到阻塞时进入阻塞状态,如进入同步方法或方法中调用了 sleep() 方法等情况。
结束(Terminated):当线程 run() 方法中的代码执行完毕,线程进入结束状态。
多线程访问共享资源容易出现冲突,为了防止出现数据不一致等问题,需要进行线程同步。线程同步通过锁机制来实现,Java提供了两种锁机制:
使用 synchronized 关键字修饰方法,保证同一时刻只有一个线程可以访问该方法。
public synchronized void myMethod() {
// 线程安全的代码
}
使用 synchronized 关键字指定锁对象,将要同步的代码块放在同步块中。同步块中的代码只有一个线程可以执行,其他线程需要等待锁释放。
public void myMethod() {
synchronized(lock) {
// 线程安全的代码
}
}
线程池是一种管理线程的机制,可以有效控制系统中线程的数量,避免因同时创建大量线程而导致系统资源耗尽。Java 中的 Executor 框架提供了一个线程池接口 ExecutorService,可以通过调用 Executors 类中的静态方法来创建不同类型的线程池。线程池的使用可以提高程序的性能和稳定性。
ExecutorService pool = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
pool.execute(new MyRunnable());
}
pool.shutdown();
Java 线程提供了一些 API 来创建和管理线程、线程同步和线程池等机制,可以帮助程序员更有效地实现多线程并发。对于程序员来说,了解和掌握 Java 线程编程是非常重要的。