Future和CompletableFuture
Future和CompletableFutureFutureTask123456/** @since 1.5* @author Doug Lea* @param <V> The result type returned by this FutureTask's {@code get} methods*/public class FutureTask<V> implements RunnableFuture<V> {
Future接口在Java 5中被引入,设计初衷是对将来某个时刻会发生的结果进行建模。它建模 了一种异步计算,返回一个执行运算结果的引用,当运算结束后,这个引用被返回给调用方。
一个简单例子123456789101112131415161718192021public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService executo ...
synchronized和lock
synchronized和locksynchronizedsynchronized关键字用于Java中同步方法或同步代码块中,防止资源冲突。当任务要执行被synchronized关键字保护的代码片段的时候,它将检查锁是否可用,然后获取锁,执行代码,释放锁。
基本使用同步方法1234public synchronized void synchronizedMethod() { // 该方法的内容在同一时间只能被一个线程执行 // ...}
同步代码块12345678910public void someMethod() { // 非同步的代码 synchronized (this) { // 被同步的代码块 // ... } // 非同步的代码}
其余不在赘述,相关使用应该很常见
lockReentrantLock除了使用synchronized外,我们可以使用Lock接口写的ReentrantLock 实现独占锁的功能。
查看类图可知,ReentrantLoc ...
如何超过大多数人
如何超过大多数人转载自 https://coolshell.cn/articles/19464.html 原作者:陈皓(左耳朵耗子)酷 壳 – CoolShell****12345ps:读这篇文章前先看看下面这段话,避免误导大家。切记,这篇文章不要过度深思(任何东西都无法经得起审视,因为这世上没有同样的成长环境,也没有同样的认知水平同时也**没有适用于所有人的解决方案**;也不要去急着评判里面列出的观点,只需代入到其中适度审视一番自己即可,能**跳脱出来从外人的角度看看现在的自己处在什么样的阶段**就行。具体怎么想怎么做全在你自己去**不断实践中寻找那个适合自己的方案**)引用自:https://juejin.cn/post/7207648496978870333
当你看到这篇文章的标题,你一定对这篇文章产生了巨大的兴趣,因为你的潜意识在告诉你,这是一本人生的“武林秘籍”,而且还是左耳朵写的,一定有干货满满,只要读完,一定可以练就神功并找到超过大多数人的快车道和捷径……然而…… 当你看到我这样开篇时,你一定会觉得我马上就要有个转折,告诉你这是不可能的,一切都需要付出和努力……然 ...
线程的生命周期和常用方法
线程的生命周期和常用方法生命周期根据jdk官方文档,线程状态有以下几种
NEW尚未启动的线程处于此状态。
RUNNABLE在Java虚拟机中执行的线程处于此状态。
BLOCKED被阻塞等待监视器锁定的线程处于此状态。
WAITING正在等待另一个线程执行特定动作的线程处于此状态。
TIMED_WAITING正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。
TERMINATED已退出的线程处于此状态。
一个线程可以在给定时间点处于一个状态。 这些状态是不反映任何操作系统线程状态的虚拟机状态。
如图示所见
代码演示NEW / TIMED_WAITING / TERMINATED12345678910111213141516171819202122232425262728293031package ThreadMethod;import java.util.concurrent.TimeUnit;public class ThreadState { public static void main(String[] args) throws ...
如何正确停止线程
如何正确停止线程新建线程新建线程的方式有多种
实现Runnable接口,重写run()方法
继承Thread类,重写run()方法
实现callable接口,重写call方法
使用线程池
使用定时器
…………..
代码举例-Runnable接口Runnable接口重写run方法
1234567891011121314151617public class NewRunnable implements Runnable{ @Override public void run() { System.out.println("I am NewRunnable Thread"); } public static void main(String[] args) { NewRunnable newRunnable = new NewRunnable(); Thread thread = new Thread(newRunnable); thread.start ...
Python日志模块logging的使用详解
Python日志模块logging的使用详解PS: 转载自 https://github.com/HuiDBK/LogSetupDemo
日志
在开发一些大型项目的时候,都会使用日志来记录项目运行时产生的信息,以备出错时定位分析和从日志信息中提取数据统计分析等。在 Python 中使用 logging 内置模块即可对项目进行日志的配置。
logging模块的使用简单使用
logging 模块提供了一系列便利的函数
它们分别是 debug(), info(), warning(), error(), critical()
1234567import logginglogging.debug('debug log test')logging.info('info log test')logging.warning('warning log test')logging.error('error log test')logging.critical('critical log test') ...
动漫之家《镖人》爬虫
前言初学python时写的爬虫小程序,爬取动漫之家 《镖人》漫画所有文件到本地,单线程爬取,速度一般,如果用多线程会有很大速度提升,抽取爬虫逻辑可爬全站漫画资源
代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798import osimport reimport requestsfrom bs4 import BeautifulSoupfrom tqdm import tqdm# 获取当前漫画总链接文本def get_url(url): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. ...
Java日期小工具类
Java 日期月份处理小工具类再sql的月份和日期查询中,可能会需要将日期或者月份相应推迟/提前一天或一段时间,当然,这个逻辑放在sql中也是可以的,具体还是要看需求是否合适。分享三个小方法,一个是计算月份差、日期加减一/多天、月份加减一/多天
月份差输入参数:
startMonth
字符串,格式应该为yyyy-MM对应下面SimpleDateFormat("yyyy-MM");可根据需要更改格式
endMonth
字符串,格式应该为yyyy-MM对应下面SimpleDateFormat("yyyy-MM");可根据需要更改格式
返回值
diff
整型,月份差值,如3月-6月 返回3
1234567891011121314151617181920212223242526272829303132333435public int getMonthDiff(String startMonth, String endMonth) { DateFormat dateFormat = new Sim ...
windows本地密码管理器
本地密码管理器4.0github地址:https://github.com/nerkeler/account.git
蓝奏云:https://wwtf.lanzoul.com/b01ereqoh 密码:9920文叔叔:https://t.wss.ink/f/b4jc2yer65e
重要提示程序默认密码:password
密钥位置:./resource/aesKey 建议另存一份以作备份
修改点
本地密码导出中文乱码修复
引入日志记录
优化edge/chrome 浏览器导出适配管理
PS: 程序第一次打开关于页面显示不完整,如果遇到,请关闭后再打开
=================================== ...
对称加密和非对称加密
对称加密AES和非对称加密RSAAES( Advanced Encryption Standard )对称加密算法,加密和解密过程使用同一个密钥
AES为分组加密法,把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文,在AES标准规范中,分组长度只能是128位,AES是按照字节进行加密的,也就是说每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。这导致密钥长度不同,推荐加密的轮数也不同。
因为明文和密钥必须是128位(密钥可以是192/256 位),所以需要将分组明文和密钥进行补位
python代码实现123456789101112131415161718192021222324252627282930313233from Crypto.Cipher import AESimport base64# 加密 ECB模式 16代表16字节也就是128位def aes_encode(key, password): # 将密钥填充到16的倍数 key = key + (16 - len(key) % 16) * ...