起因:一道面试题,关于concurrent包下的CyclicBarrier并发工具类,提出的一个情景题,因为不了解,所以花了一天的时间去学习并以此记录而诞生的这篇博客。 题目:假设有5个运动员(线程),让他们就绪在同一位置开始比赛跑步,当裁判(主线程)发出枪响号令。5个运动员(5个线程执行)开始奔跑 ...
分类:
编程语言 时间:
2019-03-10 21:04:29
阅读次数:
167
1、基础 1.1、什么是进程和线程 进程和线程都是操作系统所运行的程序运行的基本单元。进程可以说是是线程的集合。 进程:从系统资源讲,进程都有自己独立的地址空间,一个进程的崩溃不会影响另一个进程的执行。 线程:进程中的一个执行路径,一个进程中可以同时有多个线程在执行,当其中一个线程对公共资源做了修改 ...
分类:
编程语言 时间:
2019-03-02 10:54:05
阅读次数:
208
Fork-Join 什么是分而治之?规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解动态规范工作密取workStealing Fork/Join使用的标准范式 常用的并发工具类CountDownLatch作用: ...
分类:
编程语言 时间:
2019-03-02 10:53:05
阅读次数:
199
Runnable是个接口,使用很简单: 1. 实现该接口并重写run方法 2. 利用该类的对象创建线程 3. 线程启动时就会自动调用该对象的run方法 通常在开发中结合ExecutorService使用,将任务的提交与任务的执行解耦开,同时也能更好地利用Executor提供的各种特性 Executo ...
分类:
编程语言 时间:
2019-02-25 15:15:51
阅读次数:
229
1、在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User)。 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bool on);true则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemo ...
分类:
编程语言 时间:
2019-02-20 19:57:43
阅读次数:
222
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。 以下是本文目录大纲: 一.对Thre ...
分类:
编程语言 时间:
2019-02-14 16:32:13
阅读次数:
201
一、 Java并发编程的三个概念 原子性:一个或多个操作要么全部执行成功要么全部执行失败; 可见性:当多个线程访问同一个变量时,如果其中一个线程对其作了修改,其他线程能立即获取到最新的值; 有序性:程序执行的顺序按照代码的先后顺序执行(处理器可能会对指令进行重排序); 二、单核CPU到多核CPU的变 ...
分类:
编程语言 时间:
2019-02-10 09:32:59
阅读次数:
210
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。 由于 ...
分类:
编程语言 时间:
2019-02-07 22:15:30
阅读次数:
149
在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开 ...
分类:
编程语言 时间:
2019-02-03 18:18:37
阅读次数:
167
LinkedBlockingQueue的put,add和offer的区别 最近在学习<<Java并发编程实践>>,有很多java.util.concurrent包下的新类。LinkedBlockingQueue就是其中之一,顾名思义这是一个阻塞的线程安全的队列,底层应该采用链表实现。 看其API的时 ...
分类:
数据库 时间:
2019-02-03 12:26:50
阅读次数:
187