2017年8月7日
摘要: 我们都知道,ArrayList是一个线程不安全的容器。如果在多线程中使用ArrayList,可能会导致程序出错。但是问题出现在哪里呢?看一下下边的代码: 代码中t1和t2两个线程同时向一个ArrayList容器中添加数据。因此我们期待最后可以有2000000个元素在ArrayList中,如果你执行这 阅读全文
posted @ 2017-08-07 21:40 小晓俊 阅读(274) 评论(0) 推荐(0) 编辑
  2017年8月6日
摘要: 关键字synchronized的作用是实现线程间的同步。它的工作是对同步的代码加锁,使得每一次,只能有一个线程进入同步块,从而保证线程间的安全性。 关键字synchronized可以有多种用法: 下述代码,将synchronized作用于一个给定对象instance,因此每次当线程进入被synchr 阅读全文
posted @ 2017-08-06 23:56 小晓俊 阅读(153) 评论(0) 推荐(0) 编辑
摘要: volatile在英文字典的解释是“易变的,不稳定的”,这也是volatile关键字的语义。 如果使用volatile去申明一个变量,就等于告诉虚拟机,这个变量极有可能会给某些程序或者线程修改。为了确保被修改之后应用程序范围内的所有线程都能够“看到”或者知道。虚拟机就会采用一些手段,保证这个变量的可 阅读全文
posted @ 2017-08-06 23:39 小晓俊 阅读(142) 评论(0) 推荐(0) 编辑
  2017年8月2日
摘要: 很多情况下,线程之间的协作和人与人之间的协作非常相似。一种非常常见的合作方式就是分工合作。以我们非常熟悉的软件开发为例,在一个项目进行时,总是应该有几位号称是“需求分析师”的同事,先对系统的需求和功能点进行整理和总结,然后,以书面形式给出一份需求说明或者类似的参考文档,然后,软件设计师,研发工程师才 阅读全文
posted @ 2017-08-02 21:26 小晓俊 阅读(282) 评论(0) 推荐(0) 编辑
  2017年7月7日
摘要: 并发和并行是两个非常容易被混淆的概念,它们都可以表示两个或者多个任务一起执行,但是偏重点有些不同。并发偏于多个任务交替执行,而多个任务之间有可能还是串行的。而并行的真正意义上的“同时执行”。 严格意义上来说,并行的多个任务是真实的同时执行,而对于并发来说,这个过程只是交替的,一会儿运行A一会儿运行B 阅读全文
posted @ 2017-07-07 00:58 小晓俊 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 同步和异步通常用来形容一次方法调用。同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息的传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而异步方法通常会在另外一个线程中“真实”地执行。整个过程,不会阻碍调用者的工作。对于调用者来说异步调 阅读全文
posted @ 2017-07-07 00:07 小晓俊 阅读(438) 评论(0) 推荐(0) 编辑