![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程
plumblum
这个作者很懒,什么都没留下…
展开
-
Java读写锁
1.读写锁的使用写的时候使用锁读的时候不使用锁 public class ReadWrite { private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); private Lock readLock; private Lock writeLock; private int...原创 2018-02-07 16:58:48 · 418 阅读 · 0 评论 -
AbstractQueuedSynchronizer(2)Condition的解析
AbstractQueuedSynchronizer(2)Condition的解析我们常用 obj.wait(),obj.notify() 或 obj.notifyAll() 来实现相似的功能,但是,它们是基于对象的监视器锁的。 而这里说的 Condition 是基于 ReentrantLock 实现的,而 ReentrantLock 是依赖于 AbstractQueuedSynchroni...原创 2018-07-26 10:42:14 · 265 阅读 · 0 评论 -
AbstractQueuedSynchronizer(3)CountDownLatch、CyclicBarrier和 Semaphore的用法
AbstractQueuedSynchronizer(3)CountDownLatch、CyclicBarrier和 Semaphore的用法一.CountDownLatch用法CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLat...原创 2018-07-27 10:54:20 · 106 阅读 · 0 评论 -
线程的wait,Notification,Interruptions,Sleep,Yield详解
#线程的wait,Notification,Interruptions详解原创 2018-09-18 14:35:59 · 178 阅读 · 0 评论 -
2.2四种线程连接池的作用
四种线程连接池的作用及其使用线程池的作用:线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排 队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池 中有等待...原创 2018-11-12 15:35:13 · 319 阅读 · 0 评论 -
2.3四种线程连接池的配置和使用(和自定义线程池)
四种线程连接池的配置和使用最终调用类和方法{参数有 核心线程数目,最大线程数目,存活时间(当前线程执行完这个任务之后,等待下一个任务到来的最长等待时间。如果在这个时间内没有新的任务来到,那当前线程就会退出),时间单位,等待队列(用于存放待执行的任务)}public ThreadPoolExecutor(// 核心线程数目int corePoolSize,//最大线程数目int max...原创 2018-11-12 17:32:53 · 692 阅读 · 0 评论 -
synchronized原理分析
synchronizedsynchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性synchronized同步的基础普通同步方法,锁是当前实例对象静态同步方法,锁是当前类的class对象同步方法块,锁是括号里面的对象public class SynchronizedTest { // 普通同步方法 ...原创 2018-12-17 16:52:50 · 161 阅读 · 0 评论 -
voliate原理
volatile原理volatile当使用volatile关键字修饰共享变量(实例变量、静态变量)时,它将具备两个特性:可见性和禁止指令重排序优化1.可见性变量被修改后,会立即保存在主存中,并清除工作内存中的值。新值对于线程来说都是可见的。2.禁止指令重排序优化指令重排序是指CPU在正确处理指令依赖(数据依赖)并且保障程序执行得到正确结果的情况下,调整代码的执行顺序,允许将多...原创 2018-12-18 23:20:23 · 6976 阅读 · 0 评论 -
AbstractQueuedSynchronizer(1)源码解析(jdk1.8)
AbstractQueuedSynchronizer源码解析(简称AQS)#AQS的属性//Node类可以看成是线程static final class Node// 头结点,你直接把它当做 当前持有锁的线程 可能是最好理解的private transient volatile Node head;// 阻塞的尾节点,每个新的节点进来,都插入到最后,也就形成了一个隐视的链表p...原创 2018-12-11 13:41:43 · 223 阅读 · 0 评论 -
1.2线程状态
新建( new ):新创建了一个线程对象。 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 取 cpu 的使用权 。 运行( running ):可运行状态( runnable )的线程获得了 cpu 时间片( timeslice ) ,执行程序代码。...原创 2018-07-19 16:43:20 · 170 阅读 · 0 评论 -
线程锁的区别
Lock与synchronized 的区别1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,重要点:如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断如果 使用ReentrantLock,如果A不释放,可以使B在等待...转载 2018-02-28 15:35:29 · 575 阅读 · 0 评论 -
1.1java实现多线程的方式Thread,Runnable,Callable
java实现多线程编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。一般有三种方法,Thread,Runnable,Callable.实现Runnable接口相比继承Thread类有如下优势: 1.可以避免由于Java的单继承特性而带来的局限; 2.增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的; 3.适合多个相同程序代码的线程区处理同一资源的情况。...原创 2018-07-18 09:49:59 · 137 阅读 · 0 评论 -
2.1线程连接池的源码解析
线程连接池的解析线程池的作用: 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池 中有等待的工作线程,就可以...原创 2018-07-18 18:49:53 · 204 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier的区别
CountDownLatch和CyclicBarrier的区别 从字面上理解,CountDown表示减法计数,Latch表示门闩的意思,计数为0的时候就可以打开门闩了。Cyclic Barrier表示循环的障碍物。两个类都含有这一个意思:对应的线程都完成工作之后再进行下一步动作,也就是大家都准备好之后再进行下一步。然而两者最大的区别是,进行下一步动作的动作实施者是不一样的。这里的“动作实施者”...原创 2019-02-14 14:33:59 · 293 阅读 · 0 评论