package com.dream.web;
import org.apache.commons.lang3.SystemUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.util.Date;
import java.util.concurrent.*;
/**
* Created by test on 2019/5/30.
*/
public class ThreadPoolsTest {
public static void main(String[] args) throws Exception {
/* for(int i=0;i<5;i++) {
MyThread myThread = new MyThread(i);
new Thread(myThread).start();
}*/
//selfThreadPools();
//cachedThreadPools();
singleThreadPools();
}
/**
*
* @throws Exception
*/
public static void singleThreadPools() throws Exception{
ExecutorService threadPools = Executors.newSingleThreadExecutor();
try {
for (int i = 0; i < 1000; i++) {
if(i%10==0){
Thread.sleep(1000);
}
final int j = i;
threadPools.execute(new Runnable() {
@Override
public void run() {
//打印正在执行的缓存线程信息
System.out.println("-->" + Thread.currentThread().getName() + "正在被执行-->" + j);
}
});
}
}catch (Exception e){
e.printStackTrace();
threadPools.shutdownNow();
}finally {
if(!threadPools.isShutdown()){
threadPools.shutdown();
}
}
}
/**
* 缓存线程池
* @throws Exception
*/
public static void cachedThreadPools() throws Exception{
ExecutorService threadPools = Executors.newCachedThreadPool();
try {
for (int i = 0; i < 1000; i++) {
final int j = i;
threadPools.execute(new Runnable() {
@Override
public void run() {
//打印正在执行的缓存线程信息
System.out.println("-->" + Thread.currentThread().getName() + "正在被执行-->" + j);
}
});
}
}catch (Exception e){
e.printStackTrace();
threadPools.shutdownNow();
}finally {
if(!threadPools.isShutdown()){
threadPools.shutdown();
}
}
}
/**
* 固定长线程池
*/
public static void fixedThreadPools(final int n) throws Exception{
System.out.println("==================>"+n);
ExecutorService threadPools = Executors.newFixedThreadPool(3);
threadPools.awaitTermination(5l, TimeUnit.SECONDS);
for(int i=0;i<10;i++) {
final int j=i;
threadPools.execute(
new Runnable() {
@Override
public void run() {
//打印正在执行的缓存线程信息
System.out.println(n+"-->"+Thread.currentThread().getName() + "正在被执行-->"+j);
}
}
);
}
if(!threadPools.isShutdown()){
threadPools.shutdown();
}
}
/**
* 自定义线程池
*/
public static void selfThreadPools(){
ExecutorService threadPools = new ThreadPoolExecutor(2,4,0,TimeUnit.SECONDS,new LinkedBlockingDeque<Runnable>(100));
try {
for (int i = 0; i < 100; i++) {
final int j = i;
threadPools.execute(new Runnable() {
@Override
public void run() {
//打印正在执行的缓存线程信息
System.out.println("-->" + Thread.currentThread().getName() + "正在被执行-->" + j);
}
});
}
}catch (Exception e){
e.printStackTrace();
threadPools.shutdownNow();
}finally {
if(!threadPools.isShutdown()){
threadPools.shutdown();
}
}
}
}
class MyThread implements Runnable{
private int j=0;
public MyThread(int j){
this.j = j;
}
public MyThread(){
}
@Override
public void run() {
try {
System.out.println( "发起正在被执行-->"+j);
ThreadPoolsTest.fixedThreadPools(j);
}catch (Exception e){
e.printStackTrace();
}
}
}
相关推荐
【PyTorch版本兼容性指南】如何在不同版本中正确使用torch.nn.attention
本文详细解析了PyTorch版本兼容性问题,特别是torch.nn.attention模块在不同版本中的使用差异。针对常见的ModuleNotFoundError错误,提供了三种实用解决方案:升级PyTorch版本、使用自定义实现和源码移植方案,并分享了最佳实践建议,帮助开发者有效避免兼容性问题。
关于多线程的经典案例~
关于多线程的案例
Dify安装使用说明
dify可以说是一个功能不错的LLMOps,可以通过dify集中管理模型,可以通过界面创建AI应用,可以上传文档形成知识库,可以创建自定义工具(API),并可以对外提供API。相关功能类似Openai的GPTs或智谱的智能体,其他大厂的大模型也有类似功能,不过貌似只有dify是开源的。这就为个人本地部署AI应用提供了便利。
多线程案例
多线程案例
Python在Windows环境下驱动乐视三合一摄像头的深度图像处理实践
本文详细介绍了在Windows系统下,使用Python驱动乐视三合一摄像头进行深度图像处理的完整实践流程。从环境配置、驱动安装、OpenNI与OpenCV库的部署,到深度与彩色数据流的读取、可视化、三维点云转换以及背景移除等应用开发,为开发者提供了从零开始掌握深度摄像头编程的实战指南。
Claude Code 接入 DeepSeek-V4 教程
本文介绍Claude Code的安装配置流程:1) 安装Node.js 18+和Git(Windows);2) 通过npm全局安装@anthropic-ai/claude-code;3) 配置DeepSeek API环境变量(需替换API Key);4) 启动Claude Code或配置VSCode插件。重点包括Linux/macOS和Windows的环境变量设置方法,以及VSCode插件的settings.json配置项。完成配置后即可在终端或VSCode中使用Claude Code功能。
多线程常用详解及案例演示
多线程编程 多线程就是把操作系统中的这种并发执行机制原理运用在一个程序中,把一个程序划分为若干个子任务,多个子任务并发执行,每一个任务就是一个线程。 这就是多线程程序 。 1、使用线程可以把占据时间长的 程序 中的 任务 放到 后台 去处理 。 2、用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 。 3、程序的运行速度可能加快 。 4、在一些等待的 任务 实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。 在这种 情况 下可以释放一
【机器学习—评估指标】混淆矩阵、准确率、精确率、召回率、F1分数、ROC曲线和AUC
机器学习评价指标是衡量模型性能的关键工具。本文介绍了常见指标及其计算方法:1.混淆矩阵展示分类预测结果分布,包含TP、TN、FP、FN四个基础指标;2.准确率反映整体预测正确率;3.精确率关注预测正例的准确性;4.召回率衡量正例检出能力;5.F1分数综合平衡精确率和召回率;6.ROC曲线通过TPR与FPR的权衡关系评估模型性能,AUC值量化区分能力。文章详细说明了各指标的定义、计算公式、适用场景及局限性,并通过Python代码示例演示了具体实现方法,特别对ROC曲线和AUC的计算原理进行了深入解析。
实际场景中的多线程并发编程案例
一、CountDownLatch CountDownLatch的用法 CountDownLatch典型用法1:某一线程在开始运行前等待n个线程执行完毕。将CountDownLatch的计数器初始化为n new CountDownLatch(n) ,每当一个任务线程执行完毕,就将计数器减1 countdownlatch.countDown(),当计数器的值变为0时,在CountDownLatch上 await() 的线程就会被唤醒。一个典型应用场景就是启动一个服务时,主线程需要等待多个组件加载完毕,之后再继
VR大空间开发前期,设备选项与流程
欢迎开发者加入 VR 大空间开发之旅!本系列教程将以 Pico 和 HTC 设备为核心,系统拆解从基础搭建到功能实现的全流程,助你快速掌握开发要点。本系列共 12 篇,专为有编程基础但缺乏大空间开发经验的开发者设计。前 7 篇针对 Pico 和 HTC 设备差异分别讲解,后续步骤通用。核心目录如下:1. 空间环境要求 - 灯光设置 - 场地面积规划 - 识别图案设计2. 网络部署方案3. 客户端体验模式解析 - 一体机模式 - 云渲染模式 - 背包体验模式4. Pico空间录制方法
YOLOv8进阶实战:融合SAHI超推理算法,在无人机应用中精准捕捉视频与图片中的微小目标
YOLOv8改进是一种先进的目标检测算法,通过引入辅助超推理算法SAHI推理,使得小目标无法逃避检测。SAHI推理算法结合视频和图片的特点,利用先进的超推理技术,提高了目标检测的准确性和鲁棒性。不仅如此,YOLOv8改进还支持对视频和图片进行实时的目标检测,将检测结果直观地呈现给用户。这一技术的应用范围广泛,可以用于安防领域,提升监控设备的性能和效率;也可以用于无人驾驶领域,实现精准的目标识别和跟踪。总之,YOLOv8改进是一项具有突破性的技术,为目标检测领域带来了重大的进展。
多线程四大经典案例
目录 1.单线模式 1.1饿汉模式 1.2懒汉模式 2.阻塞式队列 2.1阻塞队列是什么 2.2生产者消费者模型 2.3标准库中的阻塞队列 2.4阻塞队列的实现 3.定时器 3.1定时器是什么 3.2标准库中的定时器 3.3实现定时器 4.线程池 4.1什么是线程池 4.2标准库中的线程池 4.3实现线程池 1.单线模式 ①什么是单例模式: 单例模式是校招中最常考的设计模式之一. ②什么是设计模式: 设计模式好比象棋中的 "棋谱". 红方当头炮,..
ESP32设备驱动-AS5600磁性旋转位置传感器
AS5600 是一款可编程的 12 位高分辨率非接触式磁性旋转位置传感器。 AS5600可以作为磁性电位器或磁性编码器使用,具有出色的可靠性和耐用性。 与传统电位器/编码器相比,AS5600具有显着优势:高精度、非接触式、旋转角度无限制。 所有这些优点使其适用于非接触式角度测量应用,例如机器人手臂、云台、电机闭环控制、机床轴定位。
多线程学习之多线程的案例
需求:有100份礼品,两人同时发送,当剩下的礼品小于10份的时候则不再送出。利用多线程模拟该过程并将线程的名字和礼物的剩余数量打印出来.
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
多线程相关实例
文章目录一、多线程案例1.单例模式1.1 饿汉模式 一、多线程案例 1.单例模式 单例模式是一种常见的“设计模式”。在软件开发中,涉及到的场景有很多,变化也有很多。很多新手如果不加限制的乱去开发,此时会造成的麻烦会有很多。于是有很多强者就把一些常见场景的一些常见解决方案整理成一份“谱”,如果按照这个谱去开发,那么开发的代码不会差到哪里去。“谱”指的就是设计模式。 场景:代码中的有些概念,不应该存在多个实例,此时应该使用单例模式来解决。例如MySQL中的DataSource类,在一个程序中就应该只有一个实例,
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
最全多线程四大经典案例及java多线程的实现_java 多线程经典案例,2024年最新简直无敌
if(curTime
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
多线程经典代码案例及手动实现
关于多线程编程的经典代码案例----单例模式,阻塞队列,定时器,线程池的分析及手动实现.
多线程经典案例
这是多线程同步的经典问题,消费者和生产者同时使用一块缓冲区,消费者需要从缓冲区取东西,同时生产者要生产商品放入缓冲区。缓冲区满时生产者不再生产商品,缓冲区为空时消费者也不能再消费。生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件。如下图所示:分析:1、设计一个库存类:Store ,push(放入),pop(取出);
Java中多线程经典案例
相反懒汉模式则会引起线程不安全,因为懒汉模式是在有需要的时候才会去实例化对象,在多线程编程中懒汉模式要进行读和写操作,这一修改变量的值不是原子的,所有会造成线程不安全的问题,因此我们要使用synchronized对读和写操作进行加锁,打包成一个原子的操作,加锁会影响性能的问题,如果是第一次判断instance是否为空则需要加锁,若后续第二次...等,每次加锁都势必会影响性能问题,因此我们可以考虑在加一个if判断。
Java多线程案例(超详细)
在Java中,设计模式是指在软件开发过程中,针对反复出现的问题总结归纳出的通用解决方案,就像是一套经过验证的“最佳实践”。它就好比建筑领域的经典建筑设计图纸,遇到相似的建筑需求时,可参考这些图纸高效完成设计。
多线程典型例子(1)——阻塞队列
学习了数据结构,我们会接触到队列此数据结构。队列的特点是先进先出。那么如何理解“先进先出”这个概念呢?下图中,右边是一组数:0 1 2 3 4 5 6 7 8,从左至右依次将数字放入队列queue中,再依次将队列中的数字取出来,此时由于0先进队列,因此0也是先出队列的。再举个例子。排队做核酸。先排队的人,就能够先做完核酸,后排队的人,就只能晚点做核酸。队列有许多种类,譬如 优先级队列、消息队列、阻塞队列。此处我们重点介绍阻塞队列。阻塞队列具有队列的一切特点,也是具有先进先出的特点。
Java多线程案例及其代码实现
目录 案例一:单例模式 1.饿汉模式的代码实现 2.懒汉模式 案例二:阻塞队列 1.线程安全 2.产生阻塞效果 1.如果队列为空,尝试出队列,就会出现阻塞现象,阻塞到队列不为空为止。 2.如果队列未满,尝试入队列,也会出现阻塞,阻塞到队列不为满为止。 案例三:定时器 1.描述任务 2.组织任务(使用一定的数据结构把这些任务给放到一起) 3.执行时间到了的任务 案例四:线程池 案例一:单例模式 线程安全的单例模式有两种典型实现: 1.饿...
多线程—应用案例
),这种方式可读性强。这里注意synchronized的范围,如果只对wait和notify加锁(这是必须的),就会出现可能执行完queue.put()后,worker线程被调度下CPU,此时其他线程再添加任务到优先级阻塞队列中,其他线程执行的locker.notify()无事发生(因为worker线程还没来得及阻塞),当worker线程再次调度执行时,就会忽视刚刚新添加的任务直接进入阻塞状态,从而可能导致新添加的任务到时间并未执行。当队列空时,如果继续出队,就会阻塞,直到队列不空,则解除阻塞继续出队。
472



被折叠的 条评论
为什么被折叠?



