Java线程池解析
Java线程池解析 经典面试题 面试问题1:Java的线程池说一下,各个参数的作用,如何进行的? 面试问题2:按线程池内部机制,当提交新任务时,有哪些异常要考虑。 面试问题3:线程池都有哪几种工作队列? 面试问题4:使用无界队列的线程池会导致内存飙升吗? 面试问题5:说说几种常见的线程池及使用场景? 线程池概念线程池:简单理解,它就是一个管理线程的池子。 它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。因为线程其实也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走GC垃圾回收流程,都是需要资源开销的。 提高响应速度。 如果任务到达了,相对于从线程池拿线程,重新去创建一条线程执行,速度肯定慢很多。 重复利用。 线程用完,再放回池子,可以达到重复利用的效果,节省资源。 线程池的创建线程池可以通过ThreadPoolExecutor来创建,我们来看一下它的构造函数: 1234public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime,TimeUni ...
使用cloudflareTeams解锁原生ip来支持Netflix等
(前言)WARP原理 💡 cloudflare 一直以来提供了十分优秀且免费的服务,希望不要被滥用。 此文是使用 warp 来达到奈飞解锁的目的的。该方法还请自用,请勿用于解锁服务贩卖等 WARP是CloudFlare提供的一项基于WireGuard的网络流量安全及加速服务,能够让你通过连接到CloudFlare的边缘节点实现隐私保护及链路优化 其连接入口为双栈(IPv4/IPv6均可),且连接后能够获取到由CF提供基于NAT的IPv4和IPv6地址,因此我们的单栈服务器可以尝试连接到WARP来获取额外的网络连通性支持。这样我们就可以让仅具有IPv6的服务器访问IPv4,也能让仅具有IPv4的服务器获得IPv6的访问能力。 为仅IPv6服务器添加IPv4 原理如图,IPv4的流量均被WARP网卡接管,实现了让IPv4的流量通过WARP访问外部网络。 为仅IPv4服务器添加IPv6 原理如图,IPv6的流量均被WARP网卡接管,实现了让IPv6的流量通过WARP访问外部网络。 双栈服务器置换网络 有时我们的服务器本身就是双栈的,但是由于种种原因我们可能并不 ...
获取免费的Cloudflare team Warp
💡 部分图片文字转载自: Cloudflare Teams 团队 Warp 简介WARP 默认分配到的通道是共享的通道,很多用户被挤在一起,导致网速变得越来越差。 这时候有两种方法。 一种是使用 WARP+,而另外一种就是使用 CloudFlare Teams 的专属通道 使用cloudflare teams通道注册免费的team进入 cloudflare官网 点击左边侧边栏的 Teams 输入一个team name 输入完名称之后选择一个免费的计划即可 然后点击 Process to payment 这个时候会让你选择 payment 其实已经处理完了,直接重新进入teams即可 然后再点击侧边栏 My Teams 的Devices 剩下的就是链接你的设备 输入你邮箱的后缀,这里以 Gmail 为例,然后点击 Save (这个邮箱后缀无所谓,后续可以随意添加和修改) 获取 WARP Teams 的配置文件打开 Android Studio 官网 点击中间的 Download Android Studio,进行下载安装包 依据提示进行安装 打开 Androi ...
Github当本地项目push提交代码服务器同步更新拉取pull
💡 使用github webhook功能来实现本地项目修改提交代码远程服务器自动拉去 pull最新的代码 环境 centos7 nginx nodejs npm pm2 首先安装git拉取我们的代码 💡 如果你的git 仓库是私有的需要配置ssh 才能进行访问 1yum update -y && yum install -y git 然后安装nginx安装Nginx 安装nodeJS下载安装包1wget https://nodejs.org/dist/v12.16.0/node-v12.16.0-linux-x64.tar.xz 解压1tar -xvf node-v12.16.0-linux-x64.tar.xz 修改配置文件etc/profile PATH=/opt/nodejs/bin:$PATH12345678910**#你的node下载解压到路径 比如我刚刚解压到了 /opt/node/node-v12.16.0-linux-x64 那路径就是 PATH=/opt/node/node-v12.16.0-linux-x64/bin:$P ...
nginx动态封禁ip
背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP,拒绝提供服务。 架构实现 IP 黑名单的功能有很多途径 在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求 在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单 在应用层面,在请求服务之前检查一遍客户端 IP 是否在黑名单 我们选择通过 Nginx+Lua+Redis 的架构实现 IP 黑名单的功能 为了方便管理和共享架构图如下 话不多说,启动一个Redis启动命令12#参数命令我就不解释了,你懂的 别忘记了连接的时候输入密码就行了docker run -p 6379:6379 --name redis -v /opt/redis/redis.conf:/etc/redis/redis.conf -v /opt/redis/data:/data -d sky0429/sky0429/redis:final redis-server /etc/redis/redis.conf --appen ...
Java工具库
作很多年后,才发现有很多工具类库,可以大大简化代码量,提升开发效率,初级开发者却不知道。而这些类库早就成为了业界标准类库,大公司的内部也都在使用,如果刚工作的时候就有人告诉我使用这些工具类库,该多好! 一块看一下有哪些工具类库你也用过。 1. Java自带工具方法1.1 List集合拼接成以逗号分隔的字符串123456789// 如何把list集合拼接成以逗号分隔的字符串 a,b,cList<String> list = Arrays.asList("a", "b", "c");// 第一种方法,可以用stream流String join = list.stream().collect(Collectors.joining(","));System.out.println(join);// 输出 a,b,c// 第二种方法,其实String也有join方法可以实现这个功能String join = String.join(",", list);System.out.print ...
如何合理得使用java线程池
💡 FROM Java线程池(围绕ThreadPoolExecutor讲解工作流程、常见参数、调优、监控)_lucyLee的博客-CSDN博客_java线程池的工作流程 1. Java的线程池① 合理使用线程池的好处 Java的线程池是运用场景最多的并发框架,几乎所有需要异步或者并发执行任务的程序都可以使用线程池。 合理使用线程池能带来的好处: 降低资源消耗。 通过重复利用已经创建的线程降低线程创建的和销毁造成的消耗。例如,工作线程Woker会无线循环获取阻塞队列中的任务来执行。 提高响应速度。 当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。 线程是稀缺资源,Java的线程池可以对线程资源进行统一分配、调优和监控。 ② 线程池的工作流程 一个新的任务到线程池时,线程池的处理流程如下:1.线程池判断核心线程池里的线程是否都在执行任务。 如果不是,创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。 线程池判断阻塞队列是否已满。 如果阻塞队列没有满,则将新提交的任务存储在阻塞队列中。如果阻塞队列已满,则进入下 ...
SpringBoot线程池
当我们插入数据库数据量大的时候,单线程就有点慢了 线程池ThreadPoolExecutor,而用的是Spring Boot项目,可以用Spring提供的对ThreadPoolExecutor封装的线程池ThreadPoolTaskExecutor,直接使用注解启用 使用步骤先创建一个线程池的配置,让Spring Boot加载,用来定义如何创建一个ThreadPoolTaskExecutor,要使用@Configuration和@EnableAsync这两个注解,表示这是个配置类,并且是线程池的配置类 123456789101112131415161718192021222324252627282930313233343536@Configuration@EnableAsyncpublic class ExecutorConfig { private static final Logger logger = LoggerFactory.getLogger(ExecutorConfig.class); @Value("${async.exec ...
DockerPHPApi环境搭建
配置需要 nginx和php环境我们先拉取分支12345# php环境分支docker pull php:8.1.0RC1-fpm-alpine3.14# nginx 环境分支docker pull nginx 启动php容器12#启动 php 并且挂载文件夹docker run -d -v /opt/php/www:/var/www/html -p 9000:9000 --name php 你的镜像id 查看我们php容器启动的状态查看PHPfpm端口9000是否启动(这步很重要,没启动的话需要重装php镜像) 1netstat -tunlp | grep 9000 netstat netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况 netstat 查看端口占用语法格式 netstat -tunlp | grep 端口号 -t (tcp) 仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化为数字-l 仅列出在Listen(监听)的服务状态-p 显示建立相关链接的程序名 启动Nginx容器 启动之前 ...
网络
服务器配置SSL证书-Nginx版