自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大德如危的博客

不积跬步无以至千里 不积小流无以成江海

  • 博客(18)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java并发之线程池的实现原理

上一篇我们简单介绍了Java线程池ThreadPoolExecutor的基本应用和简单的操作流程。这一篇我们将深入理解线程池的实现方法,只有彻底掌握,才能正确运用! 一、构造方法     ThreadPoolExecutor的基本构造方法如下: public ThreadPoolExecutor(int corePoolSize,

2017-06-30 21:14:39 303

原创 Java并发之线程池简介

一、线程池简介         在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每个任务创建一个新的线程来执行,这些线程的创建与销毁将消耗大量的计算资源。Java的线程在此情况下,既是工作单元,也是执行机制。为了减少创建线程的额外开支,将工作单元与执行机制分离不失为一个好办法。由此,Java线程池自然的被设计出了。     合理地使用线程池带来极大的好处

2017-06-30 16:22:38 219

原创 Java并发容器之LinkedBlockingQueue

上一篇我们学习了ArrayBlockingQueue的实现原理,这一篇我们来学习与之对应的LinkedBlockingQueue。很明显,ArrayBlockingQueue内部是基于数组实现的,而LinkedBlockingQueue是基于链表。他们都实现了阻塞队列的take和put方法,下面我们会结合ArrayBlockingQueue作对比,来分析LinkedBlockingQueue的实现

2017-06-29 13:12:13 431

原创 Java并发容器之ArrayBlockingQueue

一、ArrayBlockingQueue简介     ArrayBlockingQueue是一个数组支持的有界阻塞队列。按照FIFO的原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。     这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的

2017-06-28 11:14:09 341

原创 Java并发容器之阻塞队列简介

阻塞队列(BlockingQueue)是支持两个附加操作的队列,这两个操作支持阻塞的插入和移除方法。     1)支持阻塞的插入方法,当队列满时,队列会阻塞插入元素的线程,直到队列不满。     2)支持阻塞的移除方式,当队列为空时,获取元素的线程会等待直到队列不为空。     几种插入、移除方法比较:     插入方法:     1)add(e):将指定的元素插入到此队列的尾部(如果立

2017-06-28 09:51:24 229

原创 操作系统之线程的基础知识

在传统操作系统中,每个进程有一个地址空间和一个控制线程。不过,经常存在在同一个地址空间运行多个控制线程的情形,线程就像是分离想进程,不过他们共享着地址空间。 为什么需要线程?     人们需要多线程的主要原因是,在许多应用中同时发生着多种活动。其中某些活动随着时间的推移会被阻塞。通过将这些应用程序分解成多个准并行运行的顺序线程,程序设计模型会变得更简单。需要线程的理由如下: 1)有了多线程的

2017-06-27 21:54:14 306

原创 操作系统之进程的基础知识

操作系统中最核心的概念是进程:这是一个对正在运行程序的抽象。操作系统的其他所有内容都是围绕着进程的概念展开的。 进程是操作系统提供的最古老的也是最重要的抽象概念之一。即使只有一个CPU,它也是支持(伪)并发操作的能力。它们将一个CPU变成多个虚拟CPU。这里我同大家一起学习关于进程的基础知识。 进程 进程模型 在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,都被组织成若干顺序进

2017-06-27 20:54:40 336

原创 Java并发容器之ConcurrentLinkedQueue

队列(Queue)是一种先进先出的数据结构,Java中实现了Queue接口的类都具有队列的功能。我们常用的LinkedList就实现了Queue接口,具有了offer()、poll()等操作。但是,LinkedList是线程不安全的,只使用于单线程操作。如果要实现一个线程安全的队列,一般有两种方式:一是使用阻塞算法,给读写操作加锁;二是使用非阻塞算法,通过循环CAS的方式来实现。本篇文章的Conc

2017-06-27 11:19:17 360

原创 一个小问题的解答

void main(){ unsigned int a=3,b=4; printf("%d",(a-b)/2); } 一个BC上面的小程序,有同学问我,为什么等于32767。考虑到大家后天就要考试了,在此我尽可能向大家把这个问题说清楚。 1 原码,反码和补码 大家使用的BC,里面的int在机器里面是用16位表示的,在下面的例子中,我都是以16位的数据存储格式来向大家说明。

2017-06-26 19:39:08 555

原创 Java并发容器ConcurrentHashMap原理及HashMap死循环原因的分析

HashMap是我们最常用的数据结构之一,它方便高效,但遗憾的是,HashMap是线程不安全的,在并发环境下,在HashMap的扩容过程中,可能造成散列表的循环锁死。而线程安全的HashTable使用了大量Synchronized锁,导致了效率非常低下。幸运的是,并发编程大师Doug Lea为我们提供了ConcurrentHashMap,它是线程安全版的HashMap。这篇文章将为大家简单分析一下

2017-06-26 10:56:44 4421

原创 Java多线程中Lock的实现

在Java 1.5之后,并发包中新增了Lock接口用来实现锁功能,它提供了Synchronized关键字类似的功能,只是在使用时需要显式地获取锁和释放锁。虽然它缺少了隐式获取锁释放锁的便捷性,但是却拥有了锁释放和获取的可操作性、可中断地获取锁以及超时获取锁等多种选择。 1 Lock接口 Lock接口的主要api如下: 1)void lock():获取锁,调用该方法的当前线程或获取锁,并从该方

2017-06-25 16:08:15 370

原创 Java多线程中Synchronized和Lock的区别

之前已经介绍过了Synchronized锁的实现原理,简单概括就是在JVM层运用了object的monitor来实现同步。而Lock是Java大神 Doug Lea 开发的util.concurrent中的一个锁工具,它实现了Synchronized的所有功能。下面从使用、性能这两个部分来具体分析两者的不同。 一.Synchronized和Lock的用法区别 Synchronized:在需要同

2017-06-25 12:00:38 1056

原创 Java多线程中线程的几种状态

Java线程在运行的生命周期中可能处于6种状态,每个确定时刻,线程只可能处于一种状态,6种状态如下: 1)NEW:初始状态,线程被构建,但是还没有执行start()方法。 2)RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行中”。 3)BLOCKED:阻塞状态,表示线程阻塞于锁。 4)WAITING:等待状态,需要其他线程唤醒或者做出一些特性动作(通知或

2017-06-24 10:37:54 421

原创 Java中的volatile关键字

当变量声明为volatile后,这个变量仿佛就具有了同步的特性,那么,volatile和正真的同步有什么区别呢?什么情况下,使用volatile可以代替Synchronized呢?下面我将同大家一起学习volatile关键字。  一,volatile特性       对volatile变量的单个读/写,可以看成为使用同一个锁,对普通变量的单个读操作函数和写操作函数进行加锁(不能是I++这种操作

2017-06-23 20:43:53 237

原创 Java内存模型的几个关键词

Java内存屏障:为了保证内存的可见性,Java编译器在生成指令序列的适当位置会插入内存屏障指令来禁止特定类型的处理器重排序。Java内存模型把内存屏障指令分为四类如下:     1)LoadLoad Barriers :确保Load1数据的装载先于Load2及所有后续转载指令的装载。     2)StoreStore Barriers:确保Store1数据对其他处理器可见先于Store2及所

2017-06-23 19:37:58 248

原创 Java多线程中实现原子操作的方法

在Java中可以通过锁和循环CAS操作的方式来实现原子操作。 一,使用循环CAS实现原子操作     JVM中的CAS操作是利用了处理器提供的 CMPXCHG 指令实现的。自旋CAS实现的基本思路就是循环进行CAS操作,直到成功为止。CAS是Compare And Swap的缩写,其操作需要输入两个值,一个旧值,一个新值,在操作期间比较旧值有没有发生改变,如果没发生,才交换成新值,发生了变化则

2017-06-23 10:59:04 880

原创 Java多线程中Synchronized的实现原理与优化

一.Synchronized的实现原理     在Java中,每个对象有一个监视器monitor,当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时会尝试获取monitor的所有权,过程如下:     1.如果monitor的进入数 entry count为0,则该线程成功进入monitor,然后将 entry count 设为1,该线程即为monitor的拥有者

2017-06-22 10:49:41 326

原创 Java多线程中join方法的实现

方法join的作用是使所属的线程对象t正常执行run()方法中的任务,而使当前线程z进行阻塞,等待t销毁后再继续执行z后面的代码。 下面贴出join方法的源码: public final synchronized void join(long millis) throws InterruptedException { long base = System.cur

2017-06-20 15:31:57 346

C语言打字游戏(easyx绘图版)

使用easyx库替代bc的图形库来用c绘图,效果不错,适合c语言新手增加学习兴趣。

2013-05-31

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除