JAVA小白的博客

自学JAVA之路

排序:
默认
按更新时间
按访问量

22.深入剖析ThreadLocal

Java并发编程:深入剖析ThreadLocal首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。  以下是本文目录大纲:  一.对ThreadLocal的理解  二.深入解析ThreadLocal...

2018-05-24 10:15:13

阅读数:41

评论数:0

19.线程池中的队列

runnableTaskQueue(任务队列):用于保存等待执行的任务的阻塞队列。 可以选择以下几个阻塞队列:BlockingQueue的几个注意点【1】BlockingQueue 可以是限定容量的。它在任意给定时间都可以有一个remainingCapacity,超出此容量,便无法无阻塞地put ...

2018-05-18 12:04:24

阅读数:50

评论数:0

21.多线程同步的几种方式

1、1.同步方法 (静态方法锁住类对象,其它方法锁住实例对象)    即有synchronized关键字修饰的方法。     由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,     内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。 2.同步代码块 (锁住标...

2018-04-25 23:35:27

阅读数:55

评论数:0

8.多线程死锁demo及其解决方案

Java线程死锁demo当线程中的同步代码有多个嵌套同步锁时容易发生死锁,下面的例子中2个线程公用2锁,一个拿着钱,要饭,一个拿着饭,要钱,互相不给,所以可能造成死锁现象:package dielock;public class Money implementsRunnable{    priva...

2018-04-16 00:51:58

阅读数:91

评论数:0

13.Java多线程之Synchronized和Volatile的比较

Java多线程之内存可见性和原子性:Synchronized和Volatile的比较      在说明Java多线程内存可见性之前,先来简单了解一下Java内存模型。     (1)Java所有变量都存储在主内存中     (2)每个线程都有自己独立的工作内存,里面保存该线程的使用到的变量副本(该...

2018-04-16 00:27:21

阅读数:39

评论数:0

7.Java线程死锁及解决方案

Java线程死锁及解决方案要了解线程死锁,首先要明白什么是死锁死锁通俗点讲:死锁就是两个或两个以上的进程或线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。用简单一点的例子来说吧比如这个交通堵塞的例子,从图中可以看到四个方向行驶的汽车互相阻塞...

2018-04-12 23:28:57

阅读数:29

评论数:0

17.安全点与安全区

安全点:作用:解决在枚举根节点时引用关系变化的问题特征:是否具有让程序长时间执行的特征条件:指令序列复用,如方法调用、循环跳转、异常跳转什么是safepointsafepoint可以用在不同地方,比如GC、Deoptimization,在HotspotVM中,GC safepoint比较常见,需要...

2018-04-08 17:33:40

阅读数:327

评论数:0

16.无锁化编程有哪些常见方法

无锁化编程有哪些常见方法?·        针对计数器,可以使用原子加·        只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer)多个线程也不怕,利用queue去处理。(并发转成单线程)·        RCU(Read-Copy-Update),新旧副...

2018-04-08 16:04:51

阅读数:81

评论数:0

20.简单设计实现线程池

上代码之前,要先补充一下线程池构造的核心几个点1.   线程池里的核心线程数与最大线程数2.   线程池里真正工作的线程类worker3.   线程池里用来存取任务的队列4.   线程中的任务类task  另外一个比较简单的方法,推荐面试答这种,逻辑会比较好吧~ classThreadExcuto...

2018-03-29 16:54:49

阅读数:94

评论数:0

18.深入浅出线程池

摘要: 本文主要讲了Java当中的线程池的使用方法、注意事项及其实现源码实现原理,并辅以实例加以说明,对加深Java线程池的理解有很大的帮助。一般而言,线程池有以下几个部分:1.完成主要任务的一个或多个线程.2.用于调度管理的管理线程.3.要求执行的任务队列.     首先,讲讲什么是线程池?照笔...

2018-03-29 13:57:56

阅读数:50

评论数:0

15.多线程编程中锁的4种状态-无锁状态 偏向锁状态 轻量级锁状态 重量级锁状态

一:java多线程互斥,和java多线程引入偏向锁和轻量级锁的原因?--->synchronized的重量级别的锁,就是在线程运行到该代码块的时候,让程序的运行级别从用户态切换到内核态,把所有的线程挂起,让cpu通过操作系统指令,去调度多线程之间,谁执行代码块,谁进入阻塞状态...

2018-03-27 18:53:06

阅读数:161

评论数:0

14.Java中CAS操作详解

在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放...

2018-03-27 18:21:55

阅读数:72

评论数:0

12.多线程-synchronized关键字解析

     本篇主要从另外一个博主上学习的,他对Java并发中synchronized关键字进行较为深入的探索,篇幅有点长,有些我还领悟得不是很好。但是我觉得该文章让我对同步的方法领悟到很多东西,所以整理后,加上一些自己的标注,就分享出来了。·        synchronized的三种应用方式o...

2018-03-25 13:19:53

阅读数:91

评论数:0

11.多线程-volatile关键字解析

volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在了解volatile关键字时,可以先看一下上一篇博客了解一下与内存模型相关的概念和知识,然后此片文章才分析volatile关键字的实现原理,在给出了几个使...

2018-03-24 16:17:26

阅读数:75

评论数:0

10.并发线程的happens-before原则(先行发生原则)

下面就来具体介绍下happens-before原则(先行发生原则):·        程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作·        锁定规则:一个unlock操作先行发生于后面对同一个锁的lock操作。(先解锁,才可以在后面继续上锁)·    ...

2018-03-24 15:42:42

阅读数:76

评论数:0

9.并发编程的三个概念(原子性、可见性和有序性)存在的问题及其解决方案

以下是本文的目录大纲:一.内存模型的相关概念二.并发编程中的三个概念三.Java内存模型一.内存模型的相关概念大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,...

2018-03-24 15:18:19

阅读数:147

评论数:0

4.线程中的一些常用方法的用法 join()、yield()、sleep()、wait()、notify()、notifyAll()

1.线程休眠sleep();:线程有优先级,但是我们可以用此方法人为的改变它们的优先级,让线程暂停,它其他线程获得分配空间。 用法:Thread.sleep(2000);//休眠两秒 2.线程让步yield();就是让出自己的分配空间给其他线程,那么问题来了,让步多久呢?如果有两条线程的话,是不是...

2018-03-24 00:34:44

阅读数:43

评论数:0

5.Java中sleep()与wait()区别

学习时正好碰到这两个方法,就查阅相关资料,并通过程序实现,进行区别一下:1、每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。sleep()方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回...

2018-03-24 00:26:49

阅读数:54

评论数:0

3Java线程的5种状态及切换

.Java中的线程的生命周期大体可分为5种状态。1. 新建(NEW):新建了一个线程对象。2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(RUNN...

2018-03-24 00:01:27

阅读数:91

评论数:0

6.Java多线程实现的四种方式

Java多线程实现的四种方式·        1.继承Thread类,重写run方法·        2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target·        3.通过Callable和FutureTask创建线...

2018-03-22 14:06:23

阅读数:124

评论数:0

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