线程
array_it
这个作者很懒,什么都没留下…
展开
-
饥饿线程
定义 如果一个线程因为CPU被其他线程全部占有而始终抢不到CPU的运行时间,那么这个线程就是饥饿线程。 实例 由于线程t1的优先级为9,线程t2的优先级为1(最低),造成t2很难抢到CPU的运行时间。 import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantReadWriteLock; public class HungryThread{ ReentrantReadWriteLock rea原创 2020-09-08 20:42:55 · 248 阅读 · 0 评论 -
ThreadLocal原理
概念 ThreadLocal并不是用来解决多线程下的共享变量问题,而是提供县城内的线程访问。在多线程环境下,可以保证各个线程之间的变量相互隔离。 使用 public class ThreadLocalDemo implements Runnable{ private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>(); public void run(){ for (int i =原创 2020-09-08 09:41:55 · 107 阅读 · 0 评论 -
线程池状态及原理
线程池状态 RUNNING:初始化状态是RUNNING.。线程池一单被创建,就处于RUNNING状态,并且线程池中的任务书为0。RUNNING状态下,能接受新的任务,以及对已经添加的任务进行处理。 SHUTDOWN:SHUTDOWN状态时,不接受新的任务,但能处理已经添加的任务。代用线程池的shutdown()接口时,线程池有RUNNING->SHUTDOWN。 STOP:不接受新任务,不处理已经添加的任务,并且中断正在处理的任务。调用线程池的shutdownNow()接口时,线程池有(RUNNIN原创 2020-09-07 11:37:05 · 304 阅读 · 0 评论 -
线程状态图
原创 2020-09-07 10:02:07 · 111 阅读 · 0 评论 -
AQS(AbstractQuenedSynchronizer)原理及应用
原理 AQS使用一个int类型的成员变量state来表示同步状态,当state>0时表示已经获取了锁,当state=0时表示释放了锁,它提供了三个方法(getState()、setState(int newState)、compareAndSetState(int expect,int update))来对同步状态state进行操作 AQS通过内置的FIFO同步队列来完成资源获取路线的派对工作,如果当前线程获取同步状态失败时,AQS则会将当前线程信息及等待状态等信息构造成一个节点(Node)并将其原创 2020-08-21 11:32:17 · 187 阅读 · 0 评论 -
synchronized修饰的同步方法的个人理解
一个类中的某个方法被synchronized修饰之后就是同步方法, 当多个线程访问一个类的某一个对象的synchronized修饰的同步方法的时候,此时的同步锁为此对象,所以线程只能依次获取这个对象锁,之后才能执行这个同步方法; 当多个线程访问一个类不同对象的synchronized修饰的同步方法的时候,此时的同步锁分别为各个对象,所以线程之间互补等待; 如果想要一个类的某个synchron原创 2017-06-15 09:18:53 · 537 阅读 · 0 评论 -
线程池中线程和队列
线程池中的队列分两种,有界队列和无界队列, 当使用有界队列的时候,新加入一个任务会先判断核心线程是否有空闲的,如果有,就直接使用线程执行,如果没有,会看看有界队列是否已满,如果未满,则将任务加入有界队列中,等核心线程有空闲的时候再去从队列中获取执行,如果有界队列已满,这个时候就会看看正在运行的线程数是否大于最大线程数,如果不大于,则创建新的线程执行这个任务,如果大于,则执行拒绝策略。 当使用无...原创 2019-09-10 13:56:40 · 595 阅读 · 0 评论