线程池
努力努力再努力@x
这个作者很懒,什么都没留下…
展开
-
java自旋锁
自旋锁自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区 private AtomicReference<Thread> sign =new AtomicReference<>(); public void lock() { Thread current = Thread.currentThread(); whil...原创 2019-12-20 16:44:28 · 130 阅读 · 0 评论 -
CAS无锁机制
CAS无锁机制(1)与锁相比,使用比较交换(下文简称CAS)会使程序看起来更加复杂一些。但由于其非阻塞性,它对死锁问题天生免疫,并且,线程间的相互影响也远远比基于锁的方式要小。更为重要的是,使用无锁的方式完全没有锁竞争带来的系统开销,也没有线程间频繁调度带来的开销,因此,它要比基于锁的方式拥有更优越的性能。(2)无锁的好处:第一,在高并发的情况下,它比有锁的程序拥有更好的性能;第二,它天生...原创 2019-12-20 16:38:26 · 132 阅读 · 0 评论 -
java读写锁
读写锁假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写(译者注:也就是说:读-读能共存,读-写不能共存,写-写不能共存)。这就需要一个读/写锁来解决这个问题。Java5在java.util.con...原创 2019-12-20 16:20:06 · 531 阅读 · 0 评论 -
java重入锁
重入锁锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利。重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁下面有两段代码...原创 2019-12-20 15:49:17 · 133 阅读 · 0 评论 -
java悲观锁和乐观锁
悲观锁和乐观锁场景当多个请求同时操作数据库时,首先将订单状态改为已支付,在金额加上200,在同时并发场景查询条件下,会造成重复通知。悲观锁:每次拿数据的时候,都会上锁悲观锁:悲观锁悲观的认为每一次操作都会造成更新丢失问题,在每次查询时加上排他锁。每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到...原创 2019-12-20 15:31:23 · 119 阅读 · 0 评论 -
合理配置线程池
合理配置线程池要想合理的配置线程池,就必须首先分析任务特性,可以从以下几个角度来进行分析:任务的性质:CPU密集型任务,IO密集型任务和混合型任务。任务的优先级:高,中和低。任务的执行时间:长,中和短。任务的依赖性:是否依赖其他系统资源,如数据库连接。CPU密集型时,任务可以少配置线程数,大概和机器的cpu核数相当,这样可以使得每个线程都在执行任务IO密集型时,大部分线程都阻塞,故需...原创 2019-12-20 15:10:51 · 138 阅读 · 0 评论 -
线程池原理分析
提交一个任务到线程池中,线程池的处理流程如下:1、判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创建)则创建一个新的工作线程来执行任务。如果核心线程都在执行任务,则进入下个流程。2、线程池判断工作队列是否已满,如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。3、判断线程池里的线程是否都处于工作状态,如果没有,则...原创 2019-12-20 15:04:53 · 137 阅读 · 0 评论 -
线程池的4种创建方式
线程池四种创建方式Java通过Executors(jdk1.5并发包)提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线...原创 2019-12-20 14:38:11 · 968 阅读 · 0 评论 -
多线程之线程池
什么是线程池?为什么要用到线程池?使用线程池的好处是啥?首先我们来说说为什么要用到线程池?使用线程池的好处是啥?在程序中创建,启动,销毁一个线程是非常耗时的操作。所以我们要想办法优化,就有了线程池使用了线程池就可以管理我们的线程,提高程序效率,什么是线程池?在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二...原创 2019-12-20 12:16:43 · 108 阅读 · 0 评论