📜  Java多线程(1)

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

Java多线程介绍

Java多线程是指在一个程序中同时运行多个线程,每个线程都可以独立运行,互不干扰。Java多线程可以提高程序的处理能力和效率,适用于需要同时处理多个任务的场景。

线程基础

Java多线程的实现基于Thread类和Runnable接口,Thread类是一个线程的抽象类,而Runnable接口是一个表示可运行任务的接口。实现多线程需要创建一个类来继承Thread类或者实现Runnable接口。

public class MyThread extends Thread {
    @Override
    public void run() {
        // 线程运行的逻辑
    }
}

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 线程运行的逻辑
    }
}
创建线程

通过继承Thread类创建线程:

MyThread thread = new MyThread();
thread.start();

通过实现Runnable接口创建线程:

MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
线程同步

Java多线程可能存在线程安全问题,需要通过线程同步来解决。常用的方法有synchronized关键字、Lock接口、Semaphore信号量等。

使用synchronized关键字实现同步:

public synchronized void syncMethod() {
    // 需要同步的代码块
}

public void syncBlock() {
    synchronized (this) {
        // 需要同步的代码块
    }
}

使用Lock接口实现同步:

Lock lock = new ReentrantLock();
public void lockMethod() {
    lock.lock();
    try {
        // 需要同步的代码块
    } finally {
        lock.unlock();
    }
}

使用Semaphore信号量实现同步:

Semaphore semaphore = new Semaphore(1);
public void semaMethod() {
    try {
        semaphore.acquire();
        // 需要同步的代码块
    } catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        semaphore.release();
    }
}
线程池

Java多线程中的线程池可以减少线程的创建和销毁,提高性能和效率。线程池通过Executor框架进行管理,可以使用ThreadPoolExecutor和ScheduledThreadPoolExecutor两个类来创建线程池。

创建固定大小的线程池:

ExecutorService executorService = Executors.newFixedThreadPool(10);

创建可缓存的线程池:

ExecutorService executorService = Executors.newCachedThreadPool();

创建定时执行的线程池:

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10);
总结

Java多线程是Java开发中常用的技术,适用于需要同时处理多个任务的场景。需要注意线程安全问题,可以采用线程同步的方式进行解决。线程池可以提高性能和效率。