
Thread
文章平均质量分 87
小码农eve
不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍
展开
-
辣妈程序员挑战20天学习java并发编程
为什么要发起这样的挑战呢?java并发编程,怀孕之前也系统学过,看过源码。现在宝宝11个月多点,仿佛之前学的那些都忘记了。想重新温习一下。20天学习java并发编程应该很容易实现啊,为什么说挑战呢?我是一个996工作模式的宝妈,时间对我来说真的就是海绵里的水,要用力挤才能有。我的能力已经无法胜任现在的工作,所以我要迫切的学习。挑战20天,逼自己努力!!6月5号~6月25号20天规划如下:第一天深入分析 synchronized 的实现原理第二天深入分析 volatile...原创 2020-06-04 23:08:28 · 398 阅读 · 0 评论 -
java并发编程--概念篇
CPU时间片轮转机制每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,如果在规定时间内进程还在运行,则CPU会被剥夺并分配给另一个进程,若进程在时间片结束前阻塞或阻塞,则CPU当即进行切换。调度程序所要做的就是维护一张有序的进程表,当进程用完它的时间片后,将被移到队列的尾部从一个进程切换到另一个进程中需要一定的时间,包括保存和装入寄存器值、机内存映像、更新表格和队列等。假如进程切换需原创 2016-08-24 22:14:06 · 608 阅读 · 0 评论 -
多线程之间的交互:线程阀(一)之阻塞队列BlockingQueue简介
投入多少,收获多少;参与多深,领悟多深 参考文献:Java并发变成从入门到精通线程阀是一种线程与线程之间相互制约和相互交互机制阻塞队列BlockingQueueQueue(队列):用于保存一组原色,不过在存储元素的时候必须遵循先进先出原则。队列是一种特殊的线性表,它只允许在表的前段进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为对头。对列中没有元素时称为空队列原创 2016-12-07 22:42:36 · 584 阅读 · 0 评论 -
JDK1.8的并发新特性
JDK1.8中有一些并发的新特性,可以提高变成的效率。本文写的主要是LongAdder和stampedlock的特性。 多线程发生死锁时dump查看方式: 使用命令jps:如下所示 通过这个命令我们可以得到死锁号,然后再通过命令jstack查看如下所示: LongAdderLongAdder是什么? 在大数据处理过程,为了方便监控,需要统计数据,少不了原子计数器。为了尽量优化性能,需要采用原创 2017-03-23 15:03:38 · 5361 阅读 · 1 评论 -
Thread安全之synchronized同步锁
为什么会出现线程不安全?多个线程之间是不能相互传递数据通信的,他们之间的沟通只能通过共享变量来进行。Java内存模型(JMM)规定了jvm的主内存,住内存是多个线程共享的。当new一个对象的时候,也是被分配到主内存中,每个线程都有自己的工作内存,工作内存存储了主内存的某些对象副本,当线程操作某个对象时,执行顺序如下: 1、从主存复制变量到当前的工作内存 2、执行代码,改变共享变量 3、用工作内原创 2016-09-04 17:52:34 · 544 阅读 · 0 评论 -
java.lang.IllegalMonitorStateException
java.lang.IllegalMonitorStateException线程唤醒或者等待其他线程调用方法(waint(),notify(),notifyAll())时出现的异常为什么会出现这样的异常呢?1、解除那些在该对象上调用wait()、notify()、notifyAll()方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是对象所得持有者,该方法抛出一个java.原创 2016-09-04 21:27:44 · 6648 阅读 · 1 评论 -
Lock接口中的几个方法讨论
显示锁Lock和ReentrantLockLock 是一个接口,提供了无条件的、可轮询的、定时的、可中断的锁获取操作,所有加锁和解锁的方法都是显示的。核心方法有lock()、unlock()、tryLock(),实现类有ReentrantLock、ReentrantReadWriteLock.ReadLock、ReentrantReadWriteLock.WriteLockvoid lock()原创 2016-09-19 22:31:48 · 1049 阅读 · 0 评论 -
ReadLock和WriteLock(读写锁)
ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。使用场合假设在程序中定义一个共享的数据结构用作缓存,它大部分时间提供读服务(例如:查询和搜索),而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见。在没有读写锁支持的(Java 5 之前)时候,如果需要完成原创 2016-09-20 22:56:13 · 20712 阅读 · 3 评论 -
线程安全的集合类
java中常用的线程安全集合类java.util.HashtableHashTable的实例中有两个参数影响其性能:初始容量和加载因子 初始容量:Hash表创建时的容量 加载因子:对hash表在其容量自动增加之前可以达到多满的一个尺度,通常默认是0.75Hashtable 的函数都是同步的,意味着它是线程安全的。它的key和value都不可以为null。此外,hashtable中的映射不是有序的原创 2016-12-06 22:58:31 · 1036 阅读 · 0 评论 -
多线程之间的交互:阻塞队列之ArrayBlockingQueue
ArrayBlockingQueue概念基于数组的阻塞队列实现,在ArrayBlockingQueue内部,维护了一个定长数组,以便缓存队列中的数据对象,这是一个常用的阻塞队列,除了一个定长数组外,ArrayBlockingQueue内部还保存着两个整形变量,分别标识着队列的头部和尾部在数组中的位置。队列的头部是在队列中存在时间最长的元素。对列的尾部是在队列中存在时间最短的元素。新元素插入到队列的尾原创 2016-12-08 23:16:00 · 535 阅读 · 0 评论 -
线程池
线程池Executors是个线程的工厂类,方便快速地创建很多线程池,也可以说是一个线程池的工具类。在Executors类里面提供了一些静态工厂, 生成一些常用的线程池。常用的方法有以下三种: 1、newSingleThreadExecutor:创建一个单线程的线程池 2、newFixedThreadPool:创建固定大小的线程池 3、newCachedThreadPool:创建一个可缓存的线原创 2017-01-04 16:54:18 · 388 阅读 · 0 评论 -
Executor线程池扩展
线程池杂记,想到哪就写到哪了。线程池的种类new FixedThreadPool new SingleThreadExecutor new CachedThreadPool new ScheduledThreadPool分析:newFixedThreadPoolJDK源码: public static ExecutorService newFixedThreadPool(int nThr原创 2017-03-17 18:36:39 · 931 阅读 · 0 评论 -
ForkJoinPool的使用
我在工作中遇到过这样一个问题,是给网站用户发送营销短信。我记得我们网站会员大约有7万个,要给这7万个用户发送营销短信。而短信运营商那边要求每次发送的手机号码最好要少于3000。 那时候的我,没有什么经验,不会使用多线程,将整个程序顺序写下来,大体思路如下:这样做的后果,整个完成7万条短信的发送,需要10多分钟。最要命的是,当时我们使用nignx,或许是没配置好的原因,当一个程序执行超过6分钟没有完原创 2017-03-17 17:59:10 · 13591 阅读 · 4 评论