java 线程池工具类,线程池工具类测试可以用

该博客介绍了如何创建和管理Java线程池,通过获取处理器数量来设定线程并发数,使用`ThreadPoolExecutor`实现任务调度。线程池配置包括核心线程数、最大线程数和线程存活时间,并设置了拒绝策略来处理任务队列已满且无法增加线程的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.concurrent.Executors;

import java.util.concurrent.LinkedBlockingDeque;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

public class ThreadPoolManager {

public static ThreadPool instance;

// 获取单例的线程池对象

public static ThreadPool getInstance() {

if (instance == null) {

synchronized (ThreadPoolManager.class) {

if (instance == null) {

int cpuNum = Runtime.getRuntime().availableProcessors();// 获取处理器数量

int threadNum = cpuNum * 2 + 1;// 根据cpu数量,计算出合理的线程并发数

instance = new ThreadPool(threadNum - 1, threadNum, Integer.MAX_VALUE);//默认是双核的cpu 每个核心走一个线程 一个等待线程

}

}

}

return instance;

}

public static class ThreadPool {

private ThreadPoolExecutor mExecutor;

private int corePoolSize;

private int maximumPoolSize;

private long keepAliveTime;

private ThreadPool(int corePoolSize, int maximumPoolSize, long keepAliveTime) {

this.corePoolSize = corePoolSize;

this.maximumPoolSize = maximumPoolSize;

this.keepAliveTime = keepAliveTime;

}

public void execute(Runnable runnable) {

if (runnable == null) {

return;

}

if (mExecutor == null) {

mExecutor = new ThreadPoolExecutor(corePoolSize,// 核心线程数

maximumPoolSize, // 最大线程数

keepAliveTime, // 闲置线程存活时间

TimeUnit.MILLISECONDS,// 时间单位

new LinkedBlockingDeque(Integer.MAX_VALUE),// 线程队列

Executors.defaultThreadFactory(),// 线程工厂

new ThreadPoolExecutor.AbortPolicy() {// 队列已满,而且当前线程数已经超过最大线程数时的异常处理策略

@Override

public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {

super.rejectedExecution(r, e);

}

}

);

}

mExecutor.execute(runnable);

}

// 从线程队列中移除对象

public void cancel(Runnable runnable) {

if (mExecutor != null) {

mExecutor.getQueue().remove(runnable);

}

}

}

}

ESP32-S3在STA模式下设置静态IP通常涉及到配置网络接口的接口配置结构体,比如`esp_netif_t`。以下是一个基本步骤: 1. 首先,你需要在你的应用程序初始化阶段包含必要的头文件,如`esp_wifi.h`和`esp_netif.h`。 ```c #include "esp_wifi.h" #include "esp_netif.h" ``` 2. 定义你的静态IP、子网掩码、默认网关和DNS服务器地址。例如: ```c static const char* ssid = "your_SSID"; static const char* password = "your_PASSWORD"; static ip4_addr_t static_ip = { IP4_ADDR(192, 168, 1, 100) }; // 你的静态IP static ip4_addr_t subnet_mask = { IP4_ADDR(255, 255, 255, 0) }; static ip4_addr_t gateway = { IP4_ADDR(192, 168, 1, 1) }; static ip4_addr_t dns_server = { IP4_ADDR(8, 8, 8, 8)}; // 示例DNS服务器地址 ``` 3. 初始化WiFi模块,并连接到指定的SSID: ```c esp_err_t ret = esp_wifi_init(); if (ret == ESP_OK) { wifi_config_t wifi_config = { .sta = { .ssid = ssid, .password = password, .bssid_set = false, // 如果你知道AP的BSSID可以设置为true }, }; ret = esp_wifi_set_mode(WIFI_MODE_STA); if (ret == ESP_OK) { ret = esp_wifi_start(); if (ret == ESP_OK) { // 等待WiFi连接成功 while (!esp_wifi_get_connect_status() == WIFI_STATUS_CONNECTED) { vTaskDelay(pdMS_TO_TICKS(500)); } } } // 连接成功后再配置静态IP } ``` 4. 创建并配置静态IP网络接口: ```c esp_netif_create StaIf, NULL, &espnetif sta_if; if (esp_netif_create_data斯塔If(&sta_if)) { esp_netif_set_ip4(&sta_if, &static_ip, &subnet_mask, &gateway); esp_netif_set_dhcp_client_data(&sta_if, NULL); // 关闭DHCP服务,使用静态IP esp_netif_set_dns_server_num(&sta_if, 1, &dns_server); esp_netif_start(&sta_if); } // 然后你可以开始发送和接收数据包了 ``` 记得检查错误代码`esp_err_t`,处理可能出现的问题。此外,如果ESP32-S3需要访问互联网,你还可能需要配置路由器的端口转发规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值