多线程
文章平均质量分 82
#全家桶
这个作者很懒,什么都没留下…
展开
-
多线程—生产者消费者模式、银行家算法
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Pool { private int MAX; private int cnt = 0; private Pool(int MAX) { this.MAX = MAX; } private synchronized void produce() thr.原创 2020-07-08 10:50:36 · 318 阅读 · 0 评论 -
多线程—synchronized及同步器
synchronized关键字 synchronized有两种类型的锁: 类锁:synchronized修饰静态方法、修饰一个类的class对象。 对象锁:除了类锁,所有其他的上锁方式都认为是对象锁。synchronized修饰普通方法、synchronized(this)给代码块上锁等 规则: 加了相同锁的东西,任一时刻只能有一个线程持有锁,其他线程等待。 加了不同锁的东西访问互相不干扰 。 判断: 不同类型的锁不是同一把锁。 加的是对象锁,那么必须是同一个对象实例才是同一把锁 。 加的是原创 2020-06-28 15:00:48 · 299 阅读 · 0 评论 -
多线程—并发容器与机制
同步容器 在Java中,同步容器主要包括2类: Vector、Stack、HashTable Collections类中提供的静态工厂方法创建的类 缺点: 同步容器效率低 对同步容器进行迭代的同时修改它的内容,会报ConcurrentModificationException异常。 阻塞队列:当队列满时,队列会阻塞插入元素的线程,直到队列不满;当队列为空时,队列会阻塞获取元素的线程,直到队列不空。 非阻塞队列:若线程从中获取元素,若没有则直接返回空,不会阻塞当前线程 分段锁:简单来说就是将数据进原创 2020-06-27 16:48:16 · 226 阅读 · 0 评论 -
多线程—线程池Executor框架及四种常用线程池
池化技术应用:线程池、数据库连接池、http连接池等等。 池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 使用线程池的好处: 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度:当任务到达时,可以不需要等待线程创建就能立即执行。 管理线程:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,监控和调优。 Executor框架 绿色实线箭头是继承,虚线是接口实现 Executor接口是原创 2020-06-26 12:28:32 · 305 阅读 · 0 评论 -
多线程—Thread类及线程三种创建方式及对比
线程创建的3种方法: 1、继承Thread类并重写run方法 Thread Thread.currentThread() :获得当前线程的引用。获得当前线程后对其进行操作。 Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() :返回线程由于未捕获到异常而突然终止时调用的默认处理程序。 int Thread.activeCount():当前线程所在线程组中活动线程的数目。 void dumpStack() :将当前线程原创 2020-06-22 23:28:37 · 433 阅读 · 0 评论 -
多线程—AQS独占锁与共享锁原理
java.util.concurrent.locks包下,包含了多种锁,ReentrantLock独占锁、ReentrantReadWriteLock读写锁等,还有java.util.concurrent下的Semaphore、CyclicBarrier、CountDownLatch、Condition都是基于AQS实现的。 AQS是一个抽象类,内部维护的是用于多个线程等待一个事件(锁)。 AQS的3部分: state: privatevolatileintstate; //volatil...原创 2020-06-22 10:11:12 · 1035 阅读 · 2 评论 -
多线程—Lock、Condition、ReentrantLock、ReentrantReadWriteLock
Lock接口 public interface Lock { //下面4个方法都是获得锁 void lock(); void lockInterruptibly() throws InterruptedException; // 如果当前线程未被中断,则获取锁,可以响应中断 boolean tryLock(); //如果获取到锁返回true,否则false boolean tryLock(long var1, TimeUnit var3) throws Interrup原创 2020-06-22 17:33:31 · 301 阅读 · 0 评论