java
独舞人生
Everything should be simple
展开
-
Java线程池获取全部完成时的状态并执行后续工作
Java的几种线程池都没有所有任务完成时的回调方法,也难以获取任务完成的数量; 而很多时候我们都需要在所有任务完成时进行下一步操作; 所以在此我提供一种简便的方法: 首先线程池可以往里面提交任务,我们就利用这个特点 将通知的任务接口放到最后, 那么如果执行此任务是就代表任务已经差不多完了,那么就使用handler发送通知,然后处理后续工作; 例如: ExecutorServic...原创 2017-04-16 23:49:18 · 3496 阅读 · 0 评论 -
动态控制线程池中正在运行的任务
看起来很容易,也确实很容易,但是要不执行多余代码就很麻烦了。 先说说简单实现吧,我们在添加任务时可以利用List<Runnable>记录下来运行了的任务; 注意这个Runnable必须自定义并且在里面添加停止任务的方法,一般可以在执行步骤里面或者前面判断是否继续运行,例如 public class MyRunnbale implements Runnable{ public v...原创 2017-05-14 21:49:54 · 732 阅读 · 0 评论 -
线程池动态并安全地中断所有线程不需要使用shutdownnow()同时可以继续添加任务
对于一个线程池如果使用shutdownNow() or shutdown() 方法关闭线程池的话可能会造成不必要的开销,因为有时候我们需要关闭线程池的线程但是之后可能还会继续使用线程池, 因此,最好的办法是自己写一个终止线程的方法。一下就是我给出的一种方法: 拿到线程池源码作为自己包下的类后,直接修改源码,添加一下内容, // TODO: 2017/5/15 线程管理类 priva...原创 2017-05-15 16:25:25 · 2720 阅读 · 0 评论 -
如何实现线程池的暂停和恢复功能
很多时候我们需要暂停线程池,而不是shutdown线程池,暂停线程池可以为我们保存任务,稍后可以继续执行,从而避免不必要的开销。 这里我提供一种暂停线程池的方法; 首先拿到ThreadPoolExecutor.java源码,将其变为自己包内的私有类; 接下来修改线程池, 先在线程池类中添加一下方法和变量: BlockingQueue<Runnable> pauseQu...原创 2017-05-16 18:05:37 · 5747 阅读 · 3 评论 -
正则中的贪婪与非贪婪
贪婪就是尽量往多的匹配 比如 + -->一次或多次,优先匹配更多的 非贪婪就是尽量少的匹配 比如 ? -->0或者1次 ,优先匹配少的 在贪恋匹配后面加上?就变为了非贪婪匹配 正则表达式贪婪与非贪婪模式 之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配 如:Strin...转载 2019-05-17 00:24:45 · 2720 阅读 · 0 评论 -
java中的synchronized
synchronized同步块 参数就是锁,同一个对象代表同一个锁。具体含义就是那个对那个对象的操作需要同步那参数一般就是谁原创 2019-05-17 00:31:36 · 89 阅读 · 0 评论 -
乐观锁与悲观锁
乐观锁: 总是认为在读取的时候认为没有其他线程在修改 因此不加锁 但是在修改的时候必须获取锁 也就是多个线程同时修改时,存在锁竞争 锁的实现方式也是自旋锁(CAS) 悲观锁: 总是假设最坏的情况,每次读取都有其他线程在修改数据 因此,每次读取和修改都会加上锁。 CAS操作: 需要读写的内存值V 比较值A 更新值B 如果内存值V和比较值B相等,那么将更新值B写入内存V...原创 2019-05-17 00:36:19 · 196 阅读 · 0 评论