多线程
wxd_1024
嗯嗯
展开
-
多线程基本概念
多线程什么是程序:为了完成某项特定的任务,使用某种语言,编写一组指令的集合什么是进程:是一个正在进行的程序什么是线程:在一个进程中,执行的一套功能流程,称为线程 在一个进程中,执行的多套功能流程,称为多线程多线程程序的优点1、降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2、提高响应速度。当任务到达时,...原创 2018-05-29 11:24:33 · 360 阅读 · 0 评论 -
Runnable和Callable的区别
Runnable和Callable相同点和区别相同点:两者都是接口;都可用来实现多线程程序;都需要调用Thread.start()启动线程;不同点:两者最大的不同点是:实现Callable接口的任务线程能返回执行结果;而实现Runnable接口的任务线程不能返回结果; Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛;以下网上抄的代码package com.inte.fork;/** * Created.原创 2020-05-20 10:46:35 · 519 阅读 · 0 评论 -
线程共享数据的安全问题和死锁问题
多线程访问共享变量的时候会出现线程安全的问题解决线程安全的问题:线程同步(同步代码块、同步方法、同步锁)1.同步代码块synchronized(同步监视器){//需要访问的共享数据}同步监视器 : 俗称“锁”。可以使用任何对象充当。但是必须确定多个线程持有同一把锁(同一个对象)2.同步方法同步方法: ---- 隐式的锁 : this ---...原创 2018-05-29 14:19:47 · 783 阅读 · 0 评论 -
线程之间的通信(wait()/notify()机制)——等待唤醒机制
wait() : 使当前同步监视器上的线程进入等待状态, 同时释放锁 对象名.wait()notify() / notifyAll() : 唤醒当前同步监视器上等待状态的一个(所有)线程 对象名.notify()-------------------- 上述方法必须在加锁的状态下使用(使用在同步方法中)wait(),notify();notifyAll()这些方法定义在obj...原创 2018-05-29 18:01:01 · 918 阅读 · 0 评论 -
jdk线程池—Executor体系
线程池: 提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。体系结构(java.util.concurrent)Executor : 负责线程的使用与调度的根接口 只有一个execute(Runnable)方法ExecutorService 子接口:ExecutorService 继承 Executor,并声明了...原创 2018-05-29 20:41:01 · 758 阅读 · 0 评论 -
线程池的应用
1、线程池状态在ThreadPoolExecutor中定义了一个volatile变量,另外定义了几个static final变量表示线程池的各个状态:volatile int runState;static final int RUNNING = 0;static final int SHUTDOWN = 1;static final int STOP = 2;...原创 2018-05-30 09:31:08 · 2279 阅读 · 0 评论 -
限制java线程池运行线程以及等待线程数量的策略
对于java.util.concurrent.Executors所提供的FixedThreadPool,可以保证可以在内存中有固定数量的线程数运行。但是由于FixedThreadPool绑定的是LinkedBlockingQueue。队列的上限没有限制(默认上限为Integer.MAX_VALUE),不断的提交新的线程,会造成任务在内存中长时间的堆积。我们有可能面临如下的场景,主线程不断...原创 2018-05-30 15:35:26 · 9733 阅读 · 0 评论 -
CountDownLatch
类介绍一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。一个线程(或者多个), 等待另外N个线程完成某...原创 2018-05-30 16:31:37 · 216 阅读 · 0 评论 -
CyclicBarrier
应用场景:每个线程代表一个跑步运动员,当运动员都准备好了之后,才一起出发,只要有一个人没准备好,大家都等待。public class UseCyclicBarrier { static class Runner implements Runnable { private CyclicBarrier barrier; private String name; ...原创 2019-08-14 16:20:34 · 291 阅读 · 0 评论 -
信号量:Semaphore
SemaphoreSemaphore就是一个信号量,它的作用是限制某段代码块的并发数。 Semaphore有一个构造函数,可以传入一个int型整数n,表示某段代码最多只有n个线程可以访问, 如果超出了n,那么请等待,等到某个线程执行完毕这段代码块,下一个线程再进入。 由此可以看出如果Semaphore构造函数中传入的int型整数n=1,相当于变成了一个synchronized了。Semaphore类位于java.util.concurrent包下,它提供了2个构造器://参数permits原创 2020-06-25 14:13:56 · 171 阅读 · 0 评论 -
接口的限流:AtomicIntege、goole的guava :RateLimiter、redis + lua ... ...
问题描述某天A君突然发现自己的接口请求量突然涨到之前的10倍,没多久该接口几乎不可使用,并引发连锁反应导致整个系统崩溃。如何应对这种情况呢?常见的限流算法常用的限流算法有两种:漏桶算法和令牌桶算法。漏桶算法:漏桶算法思路很简单,请求先进入到漏桶里,漏桶以一定的速度出水,当水请求过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。令牌桶算法:对于很多应用场景来说,除了要求能...原创 2018-05-30 20:57:12 · 987 阅读 · 0 评论 -
同步容器和并发简介
同步容器 可以简单地理解为通过synchronized来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。 比如Vector,Hashtable,以及Collections.synchronizedSet,synchronizedList等方法返回的容器。同步容器的弊端 性能问题:由于被 synchronized 修饰的方法,每次只允许一个线...原创 2019-08-13 10:27:46 · 150 阅读 · 0 评论 -
阻塞队列和并发队列简介
阻塞队列与普通队列的区别 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清...原创 2018-10-31 12:59:47 · 338 阅读 · 0 评论 -
LinkedBlockingQueue
简介ava.util.concurrent包下的新类。LinkedBlockingQueue就是其中之一,顾名思义这是一个阻塞的线程安全的队列,底层采用链表实现。构造方法(具体详情查看JDK API)LinkedBlockingQueue()创建一个LinkedBlockingQueue容量为 Integer.MAX_VALUE。LinkedBlockingQueue(Colle...原创 2018-10-31 13:53:14 · 560 阅读 · 0 评论 -
DelayQueue
简介DelayQueue是一个无界的BlockingQueue,只有在延迟期满时才能从中提取元素。为了具有调用行为,存放到DelayDeque的元素必须继承Delayed接口。Delayed接口使对象成为延迟对象,它使存放在DelayQueue类中的对象具有了激活日期。该接口强制执行下列两个方法。CompareTo(Delayed o):Delayed接口继承了Comparable接口,因...原创 2018-10-31 20:01:43 · 159 阅读 · 0 评论 -
线程的8锁
/** * 1.两个普通同步方法,两个线程 ,标准打印,打印?// one two * 2.新增Thread.sleep(3000) 给getOne() 打印? // 3s后打印 one two * 3.新增普通方法 getThreee 打印?// 先打印three 3s后打印 one two * 4.两个普通同步方法,两个number对象,打印? // two 3s后打印 one *...原创 2019-12-25 14:55:06 · 186 阅读 · 0 评论