📜  Java线程(1)

📅  最后修改于: 2023-12-03 15:16:38.500000             🧑  作者: Mango

Java线程

在Java中,线程是一种轻量级的执行单元,可以同时执行多个线程的程序称为多线程程序。Java线程给程序员提供了一些方法来同时运行多条线程。

创建线程

Java提供了两种方式来创建线程:

1. 继承 Thread 类

定义一个类,继承 Thread 类,并覆盖 run() 方法。

class MyThread extends Thread {
    public void run() {
        // 线程执行的代码
    }
}

然后通过创建 MyThread 的实例来启动该线程。

MyThread myThread = new MyThread();
myThread.start();
2. 实现 Runnable 接口

实现 Runnable 接口,并覆盖 run() 方法。Runnable 接口实现类需要创建 Thread 对象并调用 start() 方法来启动该线程。

class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的代码
    }
}

MyRunnable myRunnable= new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
线程生命周期

线程生命周期包括五个状态:

  1. 新建(New):当线程对象被创建时,线程处于新建状态。

  2. 就绪(Runnable):当调用 start() 方法时,新建的线程进入就绪状态。就绪状态的线程在等待 CPU 调度器(Scheduler)的调度。

  3. 运行(Running):当线程被调度后,处于执行状态。线程执行 run() 方法中的代码。

  4. 阻塞(Blocked):线程在执行过程中遇到阻塞时进入阻塞状态,如进入同步方法或方法中调用了 sleep() 方法等情况。

  5. 结束(Terminated):当线程 run() 方法中的代码执行完毕,线程进入结束状态。

线程同步

多线程访问共享资源容易出现冲突,为了防止出现数据不一致等问题,需要进行线程同步。线程同步通过锁机制来实现,Java提供了两种锁机制:

1. 同步方法

使用 synchronized 关键字修饰方法,保证同一时刻只有一个线程可以访问该方法。

public synchronized void myMethod() {
    // 线程安全的代码
}
2. 同步块

使用 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 线程编程是非常重要的。