
多线程
chang_ge
这个作者很懒,什么都没留下…
展开
-
JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue
从Java5开始,Java提供了自己的线程池。每次只执行指定数量的线程,java.util.concurrent.ThreadPoolExecutor 就是这样的线程池。以下是我的学习过程。首先是构造函数签名如下:[java] view plain copypublic ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long kee...转载 2018-04-17 10:20:30 · 329 阅读 · 0 评论 -
深入理解Java线程池:ScheduledThreadPoolExecutor
介绍自JDK1.5开始,JDK提供了ScheduledThreadPoolExecutor类来支持周期性任务的调度。在这之前的实现需要依靠Timer和TimerTask或者其它第三方工具来完成。但Timer有不少的缺陷:Timer是单线程模式;如果在执行任务期间某个TimerTask耗时较久,那么就会影响其它任务的调度;Timer的任务调度是基于绝对时间的,对系统时间敏感;Timer不会捕获执行T...转载 2018-04-25 15:38:23 · 1915 阅读 · 0 评论 -
多线程及GIL全局锁
1. GIL是什么? 首先需要明确的一点是GIL并不是python的特性, 它是在实现python解析器(Cpython)时所引入的一个概念。而Cpython是大部分环境下默认的python执行环境,要明确一点:GIL并不是python的特性,python完全可以不依赖于GIL。2. 为什么会有GIL? 为了更有效的利用多核处理器的性能,就出现了多线程的编程方式,而随之带来的就是线程间数据...转载 2018-05-06 20:28:26 · 277 阅读 · 0 评论 -
ConcurrentHashMap分析
本文转载自:http://www.infoq.com/cn/articles/ConcurrentHashMap为什么要用ConcurrentHashMap?HashMap线程不安全多线程环境下,使用hashmap进行put操作会引起死循环,CPU利用率高,如下代码:final HashMap<String, String> map = new HashMap<String, S...转载 2018-05-07 00:37:05 · 187 阅读 · 0 评论 -
Java8新特性整理之CompletableFuture:组合式、异步编程(七)
使用CompletableFuture构建异步应用Future 接口的局限性Future接口可以构建异步应用,但依然有其局限性。它很难直接表述多个Future 结果之间的依赖性。实际开发中,我们经常需要达成以下目的:将两个异步计算合并为一个——这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果。等待 Future 集合中的所有任务都完成。仅等待 Future集合中最快结束的任务...转载 2019-03-22 10:04:22 · 955 阅读 · 0 评论 -
线程池(ThreadPoolExecutor ) 的关闭与监控
本文导读本文继续深入线程池理论部分,如关闭线程池,线程池统计等参考文章:《线程池理论 之 线程池饱和策略 与 工作队列排队策略》、《线程池(ThreadPoolExecutor) 创建与使用》关闭线程池可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池。原理都是遍历线程池中的工作线程,然后逐个调用线程的interrupt方法来中断线程,所以无法响应中断的任务...转载 2019-04-17 16:39:13 · 1368 阅读 · 0 评论 -
Java中使用同步关键字synchronized需要注意的问题
在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。关键是,不要认为给方法或者代码段加上synchronized就万事大吉,看下面一段代码: 1 2 3 4 5 6 7 8...转载 2019-04-17 18:25:25 · 227 阅读 · 0 评论 -
关于Synchronized方法使用问题
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/linglaoli/article/details/78595310前言今天遇到一个问题(项目),客户测试,插入2张SIM卡重启,只有卡1收到短信。正常情况是收到2条短信,此问题是偶现,概率不高。代码关键代码如下,通过for循环每张卡发送短信。List<Subscriptio...转载 2019-04-17 18:27:18 · 296 阅读 · 0 评论 -
让你彻底理解Synchronized
1. synchronized简介在学习知识前,我们先来看一个现象:public class SynchronizedDemo implements Runnable { private static int count = 0; public static void main(String[] args) { for (int i = 0; i <...转载 2019-04-17 18:31:10 · 114 阅读 · 0 评论 -
线程池ThreadPoolExecutor参数设置
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/u013276277/article/details/82630336以问答形式展开,会更有针对性:1、工作线程是不是越多越好?不是。a、服务器cpu核数有限,所以同时并发或者并行的线程数是有限的,所以1核cpu设置1000个线程是没有意义的。b、线程切换也是有开销的。频...转载 2019-04-20 08:36:16 · 981 阅读 · 0 评论 -
ThreadPoolExecutor线程池参数设置技巧
JDK1.5中引入了强大的concurrent包,其中最常用的莫过了线程池的实现ThreadPoolExecutor,它给我们带来了极大的方便,但同时,对于该线程池不恰当的设置也可能使其效率并不能达到预期的效果,甚至仅相当于或低于单线程的效率。ThreadPoolExecutor类可设置的参数主要有:corePoolSize在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待...转载 2019-04-20 08:58:57 · 4788 阅读 · 0 评论 -
Callable、Future、RunnableFuture、FutureTask的原理及应用
1. Callable、Future、RunnableFuture、FutureTask的继承关系 在多线程编程中,我们一般通过一个实现了Runnable接口的对象来创建一个线程,这个线程在内部会执行Runnable对象的run方法。如果说我们创建一个线程来完成某项工作,希望在完成以后该线程能够返回一个结果,但run方法的返回值是void类型,直接实现run方法并不可行,这时我们就要...转载 2018-04-19 17:27:15 · 297 阅读 · 0 评论 -
Future接口和FutureTask类【FutureTask实现了Runnable和Future接口】
API: Java代码 public interface Future<V> { /** * Attempts to cancel execution of this task. This attempt will * fail if the task has already completed, has already been cancelle...转载 2018-04-19 14:44:39 · 1573 阅读 · 1 评论 -
LinkedBlockingQueue和ArrayBlockingQueue的异同
相同:1、LinkedBlockingQueue和ArrayBlockingQueue都实现了BlockingQueue接口;2、LinkedBlockingQueue和ArrayBlockingQueue都是可阻塞的队列 内部都是使用ReentrantLock和Condition来保证生产和消费的同步; 当队列为空,消费者线程被阻塞;当队列装满,生产者线程被阻塞;使用Condition的方法...转载 2018-04-17 14:12:12 · 3705 阅读 · 3 评论 -
ArrayBlockingQueue和LinkedBlockingQueue的使用
BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,让容量满时往BlockingQueue中添加数据时会造成阻塞,当容量为空时取元素操作会阻塞。 ArrayBlockingQueue是一个由数组支持的有界阻塞队列。在读写操作上都需要锁住整个容器,因此吞吐量与一般的实现是相似的,适合于实现“生产者消费者”模式。 基于链表的阻塞队列,同Ar...转载 2018-04-17 14:25:37 · 124 阅读 · 0 评论 -
Java通过Executors提供四种线程池
http://cuisuqiang.iteye.com/blog/2019372Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledTh...转载 2018-04-12 08:22:46 · 201 阅读 · 0 评论 -
ExecutorService的execute和submit方法
三个区别:1、接收的参数不一样2、submit有返回值,而execute没有Method submit extends base method Executor.execute by creating and returning a Future that can be used to cancel execution and/or wait for completion. 用到返回值的例子,比如...转载 2018-04-12 08:28:39 · 277 阅读 · 0 评论 -
ExecutorService中submit和execute的区别
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特性。 一、创建任务 任务就是一个实现了Runnable接口的类。创建的时候实run方法即可。 二、执行任务 通过java.util...转载 2018-04-12 08:29:20 · 123 阅读 · 0 评论 -
Java 四种线程池的用法分析
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用,本文是基础篇。转载请标注原地址:http://blog.youkuaiyun.com/u011974987/article/details/51027795;1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override...转载 2018-04-12 10:26:24 · 164 阅读 · 0 评论 -
Java并发包中CyclicBarrier的工作原理、使用示例
1. CyclicBarrier的介绍与源码分析CyclicBarrier 的字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。线程进入屏障通过CyclicBarrier的await()方法。CyclicBarrier默认的构造方法是Cyclic...转载 2018-04-12 11:59:29 · 164 阅读 · 0 评论 -
Java并发包中CountDownLatch的工作原理、使用示例
1. CountDownLatch的介绍CountDownLatch是一个同步工具,它主要用线程执行之间的协作。CountDownLatch 的作用和 Thread.join() 方法类似,让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。在直接创建线程的年代(Java 5.0 之前),我们可以使用 Thread.join()。在线程池出现后,因为线程池中的线程不能直接被引用,所以就必须使用 ...转载 2018-04-12 12:01:56 · 240 阅读 · 0 评论 -
ArrayBlockingQueue源码分析及使用
BlockingQueue介绍与常用方法BlockingQueue是一个阻塞队列。在高并发场景是用得非常多的,在线程池中。如果运行线程数目大于核心线程数目时,也会尝试把新加入的线程放到一个BlockingQueue中去。队列的特性就是先进先出很容易理解,在java里头它的实现类主要有下图的几种,其中最常用到的是ArrayBlockingQueue、LinkedBlockingQueue及Synch...转载 2018-04-18 15:41:41 · 210 阅读 · 0 评论 -
Java线程之FutureTask与Future浅析
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/zmx729618/article/details/51596414一、Future使用 FutureTask是Future和Callable的结合体。传统的代码是这样写的 Future f = executor.submit(new Callable()); ...转载 2018-04-19 11:58:24 · 172 阅读 · 0 评论 -
synchronized 是公平锁吗?可以重入吗?详细的来说说 synchronized
公平锁:获取不到锁的时候,会自动加入队列,等待线程释放后,队列的第一个线程获取锁非公平锁:获取不到锁的时候,会自动加入队列,等待线程释放锁后所有等待的线程同时去竞争什么是可重入?同一个线程可以反复获取锁多次,然后需要释放多次回答标题问题:synchronized 是非公平锁,可以重入。在来看几个问题:1、synchronized 加在 static 修饰...转载 2019-04-20 13:45:04 · 3526 阅读 · 0 评论