什么叫线程什么叫多线程

一、多线程基本概念
1. 进程与线程
进程是操作系统资源分配的最小单位,拥有独立的内存空间。而线程则是CPU调度的最小单位,它共享进程的内存空间,是一种轻量级的并发执行单元。
2. 线程的创建方式
可以通过继承Thread类来创建线程:
java
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread running: " + Thread.currentThread().getName());
}
}
// 启动线程
new MyThread().start();
也可以通过实现Runnable接口来创建线程(这种方式推荐,可以避免单继承限制):
java
Runnable task = () -> System.out.println("Runnable running: " + Thread.currentThread().getName());
new Thread(task).start();
还可以实现Callable接口,该接口支持返回值:
java
class MyCallable implements Callable {
@Override public Integer call() throws Exception { return 42; }
// 使用FutureTask获取结果
FutureTask futureTask = new FutureTask(new MyCallable());
new Thread(futureTask).start();
System.out.println("Result: " + futureTask.get()); // 阻塞获取结果
二、线程生命周期与核心操作
1. 线程状态
线程状态包括:NEW(线程对象已创建,未调用start())、RUNNAE(可运行状态,可能正在执行或等待CPU时间片)、OCKED(等待获取锁时阻塞)、WAITING(无限期等待,如wait(), join())、TIMED_WAITING(有限等待,如sleep(ms), wait(timeout))和TERMINATED(线程执行完毕)。
2. 常用方法
start():启动线程。sleep(long ms):使当前线程休眠指定毫秒数(不释放锁)。join():等待线程终止(常用于主线程等待子线程)。interrupt():中断线程(需配合逻辑处理)。yield():提示调度器让出CPU(不保证生效)。
三、线程同步与线程安全
1. 同步机制
可以通过synchronized关键字实现同步,包括同步代码块和同步方法。例如:
java
// 同步代码块(锁对象)
synchronized (lockObject) {
// 临界区代码
// 同步方法(锁this或Class对象)
public synchronized void safeMethod() { ... }
// 静态同步方法(锁Class对象)
public static synchronized void staticSafeMethod() { ... }
还可以使用ReentrantLock(更灵活的可重入锁)来实现同步。Atomic原子类和并发集合(如CopyOnWriteArrayList和ConcurrentHashMap)也是常用的线程安全工具。
2. 线程安全工具类
Atomic原子类提供无锁线程安全操作,例如AtomicInteger的incrementAndGet()方法实现原子自增。并发集合替代传统集合,如ConcurrentHashMap替代HashMap。
四、线程池与性能优化
1. Executor框架(推荐替代手动创建线程)及相关内置线程池:包括固定线程数、缓存线程池、单线程池以及调度线程池等。例如:ExecutorService fixedPool = Executors.newFixedThreadPool(4);创建固定线程数线程池。ScheduledExecutorService用于定时任务。自定义线程池可通过ThreadPoolExecutor进行配置。ThreadPoolExecutor的参数包括核心线程数、最大线程数、空闲线程存活时间等。任务队列可以选择LinkedBlockingQueue等实现。同时提供了ThreadFactory接口自定义线程创建逻辑和多种拒绝策略。注意应避免一些常见错误,例如过度并发可能导致系统负载过高或资源耗尽。性能优化方面,可以根据任务类型和需求选择合适的并发级别和并发策略。还可以通过一些高级并发工具类如CountDownLatch、CyclicBarrier等进行任务协同处理或者并发资源控制管理等相关功能设计从而更有效地实现任务需求和数据并发处理的场景达到高性能需求设计的目的。五、常见问题与最佳实践在Java多线程编程中避免死锁的关键是按固定顺序获取锁使用tryLock设置超时来处理中断设置正确的等待通知机制解决竞争条件在共享变量使用上要保证其内存可见性常用volatile关键字保证变量可见性或优先使用Atomic类或synchronized块来确保数据一致性总结Java多线程是构建高性能应用的核心技术深入学习方向包括CompletableFutureFork/Join框架和Reactive编程等这些技术可以帮助我们更好地处理并发问题提高应用程序的性能和响应能力在实际开发中需要根据具体场景选择合适的并发策略和技术来确保程序的正确性和高效性同时还需要注意避免一些常见的错误如死锁内存泄漏等问题以确保程序的稳定性和可靠性
