多线程
文章平均质量分 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 · 328 阅读 · 0 评论 -
多线程—synchronized及同步器
synchronized关键字synchronized有两种类型的锁:类锁:synchronized修饰静态方法、修饰一个类的class对象。 对象锁:除了类锁,所有其他的上锁方式都认为是对象锁。synchronized修饰普通方法、synchronized(this)给代码块上锁等规则:加了相同锁的东西,任一时刻只能有一个线程持有锁,其他线程等待。 加了不同锁的东西访问互相不干扰 。判断:不同类型的锁不是同一把锁。 加的是对象锁,那么必须是同一个对象实例才是同一把锁 。 加的是原创 2020-06-28 15:00:48 · 317 阅读 · 0 评论 -
多线程—并发容器与机制
同步容器在Java中,同步容器主要包括2类:Vector、Stack、HashTableCollections类中提供的静态工厂方法创建的类缺点:同步容器效率低对同步容器进行迭代的同时修改它的内容,会报ConcurrentModificationException异常。阻塞队列:当队列满时,队列会阻塞插入元素的线程,直到队列不满;当队列为空时,队列会阻塞获取元素的线程,直到队列不空。非阻塞队列:若线程从中获取元素,若没有则直接返回空,不会阻塞当前线程分段锁:简单来说就是将数据进原创 2020-06-27 16:48:16 · 239 阅读 · 0 评论 -
多线程—线程池Executor框架及四种常用线程池
池化技术应用:线程池、数据库连接池、http连接池等等。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。使用线程池的好处:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度:当任务到达时,可以不需要等待线程创建就能立即执行。 管理线程:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,监控和调优。Executor框架绿色实线箭头是继承,虚线是接口实现Executor接口是原创 2020-06-26 12:28:32 · 320 阅读 · 0 评论 -
多线程—Thread类及线程三种创建方式及对比
线程创建的3种方法:1、继承Thread类并重写run方法Thread Thread.currentThread() :获得当前线程的引用。获得当前线程后对其进行操作。Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() :返回线程由于未捕获到异常而突然终止时调用的默认处理程序。int Thread.activeCount():当前线程所在线程组中活动线程的数目。void dumpStack() :将当前线程原创 2020-06-22 23:28:37 · 454 阅读 · 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 · 1064 阅读 · 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 · 313 阅读 · 0 评论