倪升武的博客

这世上天才很少,懒蛋却很多,你若对得起时间,时间便对得起你!

【C/C++】C++中函数重载原理

C++中的函数重载大家并不陌生,也经常使用。这篇博文首先简单介绍一下重载的规则与调用匹配,然后介绍一下重载的底层原理,最后再介绍一下 extern “C”的使用。1. 重载规则与调用匹配1.1 重载规则首先来看下函数的重载规则,这个比较简单,如下: 函数名要相同。 参数个数不同,参数...

2017-02-22 15:09:47

阅读数:4427

评论数:12

【C/C++】C++对C的扩展总结

之前一直在搞java开发,去年9月份开始,陆陆续续的公司来学校校招了,然后开始忙于校招。后来去了华为,签了约后开始写大论文,所以之后就一直没有更新自己的博客了,有些朋友留言说博客懒惰了,好久没写博客了~哈哈!现在大论文也差不多了,是时候继续学习了。 由于签了华为,岗位是通信设备软件开发,再加上之...

2017-02-21 18:32:31

阅读数:4063

评论数:7

【java虚拟机】java虚拟机的类加载机制

这篇博文主要来总结一下java虚拟机加载一个类的过程,为了避免枯燥的解说,为了让读者在读完本文后能彻底理解类加载的过程,首先来看一段java代码,我们从一个例子入手: //ClassLoaderProcess.java文件 class Singleton { private static...

2016-07-01 08:24:50

阅读数:7000

评论数:23

【java虚拟机】java内存区域与内存溢出异常

本文参考自《深入理解Java虚拟机》一书。主要总结一下java虚拟机内存的各个区域,以及这些区域的作用、服务对象以及其中可能产生的问题。 1. 运行时数据区域   java虚拟机在执行java程序的过程中会把它说管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间...

2016-06-30 07:22:29

阅读数:5785

评论数:13

【java并发】一道多线程问题

前面几篇博文基本上总结了一下java并发里的一些内容,下面通过几个练习题巩固一下。 题目描述: 模拟一个场景:处理16条日志记录,每条日志记录打印时间需要1秒,正常情况下如果将这16条记录去部打完需要16秒,现在为了提高效率,准备开启4个线程去打印,4秒钟打印完,实现这个demo。 ...

2016-06-07 17:29:59

阅读数:3913

评论数:6

【java并发】阻塞队列的使用

在前面一篇名为条件阻塞Condition的应用的博客中提到了一个拔高的例子:利用Condition来实现阻塞队列。其实在java中,有个叫ArrayBlockingQueue的类提供了阻塞队列的功能,所以我们如果需要使用阻塞队列,完全没有必要自己去写。   ArrayBlockingQueue实...

2016-06-07 09:27:34

阅读数:6158

评论数:2

【java并发】线程同步工具Exchanger的使用

如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使用的空间,就需要用到Exchanger这个类,Exchanger为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进入 exchange ()方法并给出对象时,才能接受其他线程返回时给出的对象。 ...

2016-06-06 09:48:12

阅读数:3403

评论数:7

【java并发】线程同步工具CyclicBarrier的使用

上一节中总结了Semaphore同步工具的使用,Semaphore主要提供了一个记数信号量,允许最大线程数运行。CyclicBarrier是另一个同步工具,这一节主要来总结一下CyclicBarrier的使用。先看一下官方的对CyclicBarrier的介绍: 一个同步辅助类,它允许一组线程互...

2016-06-05 21:13:09

阅读数:3446

评论数:2

【java并发】线程同步工具Semaphore的使用

Semaphore通常用于限制可以访问某些资源(物理或逻辑的)的线程数目,我们可以自己设定最大访问量。它有两个很常用的方法是acquire()和release(),分别是获得许可和释放许可。 官方JDK上面对Semaphore的解释是这样子的: 一个计数信号量。从概念上讲,信号量维护了一...

2016-06-05 10:00:54

阅读数:4187

评论数:2

【java并发】条件阻塞Condition的应用

Condition将Object监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了synchronized方法和语句的使用,Condition替代...

2016-06-04 16:38:45

阅读数:5348

评论数:3

【java并发】线程锁技术的使用

Lock锁好比传统线程模型中的synchronized技术,但是比sychronized方式更加面向对象,与生活中的锁类似,锁本身也应该是个对象。两个线程执行的代码片段如果要实现同步互斥的效果,它们必须用同一个Lock对象。锁是上在代表要操作的资源的类的内部方法中,而不是线程代码中。这一篇博文主要...

2016-06-04 07:52:09

阅读数:12273

评论数:13

【java并发】Callable与Future的应用

Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。而Callable可以返回一个结果,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来看一...

2016-06-03 19:11:55

阅读数:4980

评论数:4

【java并发】线程并发库的使用

1. 线程池的概念  在java5之后,就有了线程池的功能了,在介绍线程池之前,先来简单看一下线程池的概念。假设我开了家咨询公司,那么每天会有很多人过来咨询问题,如果我一个个接待的话,必然有很多人要排队,这样效率就很差,我想解决这个问题,现在我雇几个客服,来了一个咨询的,我就分配一个客服去接待他,...

2016-06-02 21:15:09

阅读数:7145

评论数:4

【java并发】原子性操作类的使用

在java5以后,我们接触到了线程原子性操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,本文总结一下Atomic系列的类的使用方法,其中包含: 类型 Integer Long 基本类型 AtomicInteger A...

2016-06-01 21:42:37

阅读数:7307

评论数:0

【java并发】多个线程间共享数据

先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1。   从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个data,共同操作一个data。我们先把上面这个问题放在一边,慢慢分析多个线程之间共享数据的一些情况,从最简单...

2016-05-31 22:56:36

阅读数:15895

评论数:4

【java并发】造成HashMap非线程安全的原因

0. 写在前面  在前面我的一篇总结线程范围内共享数据文章中提到,为了数据能在线程范围内使用,我用了HashMap来存储不同线程中的数据,key为当前线程,value为当前线程中的数据。我取的时候根据当前线程名从HashMap中取即可。   因为当初学习HashMap和HashTable源码的时...

2016-05-31 11:18:19

阅读数:12064

评论数:1

【java并发】ThreadLocal类以及应用技巧

上一节总结了一下,线程范围内的数据共享问题,即定义一个Map,将当前线程名称和线程中的数据以键值对的形式存到Map中,然后在当前线程中使用数据的时候就可以根据当前线程名称从Map中拿到当前线程中的数据,这样就可以做到不同线程之间数据互不干扰。其实ThreadLocal类就是给我们提供了这个解决方法...

2016-05-30 22:13:58

阅读数:3276

评论数:8

【java并发】线程范围内共享数据

假设现在有个公共的变量data,有不同的线程都可以去操作它,如果在不同的线程对data操作完成后再去取这个data,那么肯定会出现线程间的数据混乱问题,因为A线程在取data数据前可能B线程又对其进行了修改,下面写个程序来说明一下该问题:

2016-05-30 09:11:02

阅读数:5144

评论数:6

【java并发】传统线程同步通信技术

先看一个问题: 有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次……如此往返执行50次。   看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首先肯定要有两个线程,然后每个线程中肯定有个50次的循环,因为每个线程都要往返执行任务50次...

2016-05-29 11:50:59

阅读数:6012

评论数:4

【java并发】线程技术之死锁问题

我们知道,使用synchronized关键字可以有效的解决线程同步问题,但是如果不恰当的使用synchronized关键字的话也会出问题,即我们所说的死锁。死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。   ...

2016-05-29 09:52:23

阅读数:4987

评论数:9

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