java-多线程 2

### 7. 线程池

线程池是管理和复用线程的机制,可以避免频繁创建和销毁线程的开销。Java 提供了 `Executor` 框架来管理线程池。

#### 7.1 使用 Executors 工厂类

`Executors` 工厂类提供了一些静态方法,用于创建常见类型的线程池。

```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(3);

        for (int i = 0; i < 5; i++) {
            executorService.execute(() -> {
                System.out.println(Thread.currentThread().getName() + " is running");
            });
        }

        executorService.shutdown();
    }
}
```

常见的线程池类型:

- `newFixedThreadPool(int nThreads)`:创建一个固定大小的线程池。
- `newCachedThreadPool()`:创建一个缓存线程池,根据需要创建新线程,并重用空闲线程。
- `newSingleThreadExecutor()`:创建一个单线程执行器,确保任务按顺序执行。
- `newScheduledThreadPool(int corePoolSize)`:创建一个支持定时和周期性任务的线程池。

### 8. 高级特性

#### 8.1 线程组

线程组(ThreadGroup)可以用来管理一组线程,方便统一操作(如中断所有线程)。

```java
public class Main {
    public static void main(String[] args) {
        ThreadGroup group = new ThreadGroup("MyThreadGroup");

        Thread thread1 = new Thread(group, () -> {
            System.out.println(Thread.currentThread().getName() + " is running");
        }, "Thread1");

        Thread thread2 = new Thread(group, () -> {
            System.out.println(Thread.currentThread().getName() + " is running");
        }, "Thread2");

        thread1.start();
        thread2.start();

        System.out.println("Active threads in group: " + group.activeCount());
    }
}
```

#### 8.2 守护线程

守护线程(

Daemon Thread)是一种特殊的线程,它在后台运行,用于完成一些辅助工作。当所有的非守护线程结束时,守护线程也会自动结束。

```java
public class Main {
    public static void main(String[] args) {
        Thread daemonThread = new Thread(() -> {
            while (true) {
                System.out.println("Daemon thread is running");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        daemonThread.setDaemon(true);
        daemonThread.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Main thread is ending");
    }
}
```

### 9. 多线程编程中的注意事项

1. **避免死锁**:确保锁的获取顺序一致,使用超时机制避免死锁。
2. **避免过度同步**:过度同步会降低程序性能,甚至导致死锁。
3. **线程安全性**:使用线程安全的数据结构和工具类,如 `ConcurrentHashMap`、`CopyOnWriteArrayList` 等。
4. **合理使用线程池**:避免频繁创建和销毁线程,合理配置线程池大小。

### 10. 总结

多线程编程是 Java 中一个重要的组成部分,通过合理使用多线程,可以提高应用程序的性能和响应速度。Java 提供了丰富的类库和工具,帮助开发者实现多线程程序,包括 `Thread` 类、`Runnable` 接口、`Callable` 接口、同步机制、线程池等。在多线程编程中,需要特别注意线程安全性、避免死锁和过度同步等问题。通过深入理解和掌握这些概念和工具,可以编写出高效、可靠的并发程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值