读《异类》有感

前几天,读了《异类》这本书,借此记录几点感触。

  1. 简单事物的背后隐藏着复杂,而复杂是由一个个条件累积成的,当一个个条件满足时,也就顺理成章,显而易见。
  2. 伟大的人,看来生而伟大,而实际,与家庭环境,与教育培养,都有着密不可分的联系。
  3. 强者迎接挑战,弱者害怕挑战。
  4. 积少成多,汇小溪成江海,集跬步至千里。学习,贵在持之以恒。
### 关于异类线程调度策略的实现 异类线程调度策略通常涉及动态调整线程的数量以及分配任务的方式,以优化资源利用率并提高性能。以下是一个基于 Java 的简单示例代码,展示了一种可能的异类线程调度策略: #### 动态线程池管理 通过监控当前的任务负载和系统的运行状态,动态决定是否创建新的线程或回收闲置线程。 ```java import java.util.concurrent.*; import java.util.*; public class DynamicThreadPool { private final int corePoolSize; private final int maxPoolSize; private ThreadPoolExecutor executor; public DynamicThreadPool(int corePoolSize, int maxPoolSize) { this.corePoolSize = corePoolSize; this.maxPoolSize = maxPoolSize; initialize(); } private void initialize() { BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(); ThreadFactory threadFactory = Executors.defaultThreadFactory(); RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy(); executor = new ThreadPoolExecutor( corePoolSize, maxPoolSize, 60L, TimeUnit.SECONDS, workQueue, threadFactory, handler ); } public void submitTask(Runnable task) { try { adjustPoolSize(); // 调整线程池大小 executor.submit(task); } catch (RejectedExecutionException e) { System.out.println("Task rejected due to pool size limits."); } } private synchronized void adjustPoolSize() { if (executor.getActiveCount() >= executor.getMaximumPoolSize()) { return; // 如果活动线程数已达到最大值,则不增加线程 } int currentLoad = calculateCurrentLoad(); if (currentLoad > executor.getCorePoolSize()) { executor.setCorePoolSize(currentLoad); // 增加核心线程数 } } private int calculateCurrentLoad() { // 这里可以根据实际需求设计更复杂的逻辑 // 当前线程池的核心线程数加上待处理任务数作为当前负载 return Math.min(maxPoolSize, executor.getCorePoolSize() + executor.getQueue().size()); } public void shutdown() { executor.shutdown(); } } ``` 此代码展示了如何根据当前任务量动态调整线程池的核心线程数[^5]。`adjustPoolSize()` 方法用于评估当前的工作负载,并相应地修改线程池配置。 --- #### 测试代码 为了验证上述 `DynamicThreadPool` 类的功能,可以使用如下测试代码: ```java public class TestDynamicThreadPool { public static void main(String[] args) throws InterruptedException { DynamicThreadPool dynamicThreadPool = new DynamicThreadPool(2, 10); for (int i = 0; i < 20; i++) { final int taskId = i; Runnable task = () -> { System.out.println("Executing Task " + taskId + " by " + Thread.currentThread().getName()); try { Thread.sleep(1000); // Simulate some processing time } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }; dynamicThreadPool.submitTask(task); } dynamicThreadPool.shutdown(); dynamicThreadPool.executor.awaitTermination(1, TimeUnit.MINUTES); } } ``` 在此测试中,模拟了向线程池提交多个任务的过程,并观察线程池是否会根据任务数量自动扩展其规模[^6]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值