Java并发编程
wjjiang2333
这个作者很懒,什么都没留下…
展开
-
Java-线程中的异常
1.尝试使用外部线程捕获子线程运行时错误给出以下例子,我想问题是线程t1运行期间抛出的异常能够被捕获吗?(这是一个相当好的问题~)/** * @author Fisherman * @date 2019/9/4 */public class TempTest { public static void main(String[] args) { Thread...原创 2019-10-31 16:48:29 · 240 阅读 · 0 评论 -
Java并发-AbstractQueuedSynchronizer(AQS)JDK源代码分析
一、概要分析:1.1 引子 学习Java并发编程不得不去了解一下java.util.concurrent这个包,这个包下面有许多我们经常用到的并发工具类,例如:ReentrantLock,CountDownLatch,CyclicBarrier, Semaphore等。而这些类的底层实现都依赖于AbstractQueuedSynchronizer这个类,由此可见这个类的重要性。所以在Java并...原创 2019-09-22 12:43:52 · 430 阅读 · 0 评论 -
Java多线程-Furetue接口源代码详解
一、Furetue接口源代码详解1.1 Future的应用场景 不管是继承thread类重写run方法还是实现runnable接口实例对象后作为参数输入至Thread类的构造器中,都无法保证获取到之前的执行结果。通过实现Callback接口,并用Future可以来接收多线程的执行结果,而这就是我在上一篇关于Callable和Runnabe接口对比中的博客中所提到的,要彻底理解它们两者之间的差别...原创 2019-09-20 21:40:22 · 345 阅读 · 1 评论 -
Java并发-当compareAndSwapObject遇到自动装箱问题详解
一、引子 这篇文章用于记录我在尝试测试使用CAS机制下的compareAndSwapObject方法所遇到的问题:我的目的是想通过compareAndSwapObject方法调用是否能够满足“若不相同,则不更新”的性质,但是发现其总是返回false,后来意识到是int值自动装箱所导致的问题。接下来就来看代码吧。compareAndSwapObject方法简介: /**...原创 2019-09-20 21:02:00 · 1047 阅读 · 0 评论 -
Java-多线程:Callable接口和Runnable接口之间的区别
Callable接口和Runnable接口之间的区别一、源代码角度分析两接口间的区别想学习好Future设计模式,我们应当首先将Callable、以及Runnable接口之间的区别弄明白:不妨首先给出他们俩的源代码:@FunctionalInterfacepublic interface Callable<V> { /** * Computes a resu...原创 2019-09-19 17:16:12 · 1170 阅读 · 0 评论 -
Java并发编程的艺术-为何创建两个Condition接口实现线程的通知等待机制
一、引言不知道你看《Java并发编程的艺术》此书的5.6Condition接口这一节内容时,在查看BoundedQueue.java代码的时候是否有疑问:为何有两个Condition对象:private Condition notEmpty = lock.newCondition();private Condition notFull = lock.newCondition();...原创 2019-09-13 21:17:02 · 256 阅读 · 0 评论 -
Java并发-定义锁以及消费者-生产者模式实现
一、引子 对于Java并发的锁结构,我们常常使用的是synchonized结构,而由于其灵活度较低,所以在Java-5后提出了Lock接口,以及AbstractQueuedSynchronizer抽象类供我们方便且安全地来实现自定义锁结构,下面从代码出发来开始这篇文章的阅读。二、代码需求:设计一个同步工具:该工具在同一时刻, 只允许至多两个线程同时访问, 超过两个线程的访问将被阻塞, 我们...原创 2019-09-06 14:26:42 · 214 阅读 · 0 评论 -
Java并发-被动使线程wait/notify
一、介绍此任务的目标是安全、高效地使一个运行着的线程开始进入wait状态以及从wait状态中唤醒。而此操作都是通过其他线程被动地使当前线程将运行状态的强制转换,具体实现方式不妨就从代码出发吧!二、代码示例rt java.util.concurrent.atomic.AtomicInteger;/** * 实现线程的被动wait,依靠其余线程发出信号进行线程的wait\notify,而不...原创 2019-09-04 12:09:32 · 390 阅读 · 0 评论 -
Java-ThreadGroup类源代码分析与学习
/** * A thread group represents a set of threads. In addition, a thread * group can also include other thread groups. The thread groups form * a tree in which every thread group except the initial ...原创 2019-08-26 17:36:29 · 287 阅读 · 0 评论 -
Java并发-死锁
一、死锁的简单概念 所谓死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 网友们有一个生动形象的比方:两个人面对面过独木桥,甲和乙都已经在桥上走了一段距离,即占用了桥的资源,甲如果想通过独木桥的话,乙必须退出桥面让出桥的资源,让甲通过,但是乙不服,为什么让我先退出去,我还想先过去呢,于是就僵持不下,导致谁也过不了桥,这就是死锁...原创 2019-08-08 13:26:56 · 87 阅读 · 0 评论 -
Java并发-推荐使用不可变对象的原因分析
一、不可变对象的引出在Java语法中,String即是不可变对象,一旦创建,假设你若想修改String对象值,只能重新创建String对象。实现方式如下:1.将内部char类型数组用priovate以及final关键词修饰。2.将String类修饰为final以下是String的JDK源码:public final class String implements java.io.S...转载 2019-07-28 08:46:36 · 250 阅读 · 0 评论 -
Java-安全发布
一、安全发布的定义 发布是一个动词,是去发布对象。而对象,通俗的理解是:JAVA里面通过 new 关键字 创建一个对象。 发布一个对象的意思是:使对象在当前作用域之外的代码中使用。比如下面knowSecrets指向的HashSet类型的对象,由static修饰,是一个类变量。当前作用域为PublishExample类。Demo-1:import java.util.HashSet;imp...原创 2019-07-27 23:49:55 · 332 阅读 · 1 评论 -
Java并发-守护线程-Daemon
1.代码示例:CodeBlock-1:1.1守护线程在main线程中创建public class DaemonThread { public static void main(String[] args) { Thread t = new Thread() { @Override public void run() {...原创 2019-08-04 19:27:03 · 175 阅读 · 0 评论 -
Java中Synchronized的用法
引出:Java中synchronized修饰符在多线程同步中有所大展拳脚,所以十分有必要对其进行整理、对照和学习synchronized修饰符的使用场景整理总结、分类修饰对象作用范围作用对象代码块(称为同步代码块)大括号{}括起来的代码调用这个代码块的对象一般方法(被称为同步方法)整个方法调用这个方法的对象静态的方法整个静态方法此类的所有对象...原创 2019-07-23 11:10:09 · 220 阅读 · 0 评论 -
Java的线程创建方式总结与父线程概念
1.Java的线程初始化 以下介绍一种线程常见的创建方法:1.1通过继承Thread类、重写run方法实现线程的创建CodeBlock-1:/** * 线程的创建方式1:继承Thread类 */public class Demo_extends extends Thread { @Override public void run() { while ...原创 2019-08-04 13:43:00 · 818 阅读 · 2 评论 -
Java-volatile-面试官最喜欢问的关键字之一
引言volatile关键字可以说是面试官最喜欢问的关键字之一了。概述 在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以 volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模型(JMM),Java并发编程的一些特性都牵扯出来,深入地话还可以考察 JVM底层实现以及操作系统的相关知识。下面我们以一次假想的面试过程,来深入了解下 voli...转载 2019-08-03 00:04:14 · 247 阅读 · 0 评论 -
Java并发-推荐使用不可变对象的原因分析
一、不可变对象的引出在Java语法中,String即是不可变对象,一旦创建,假设你若想修改String对象值,只能重新创建String对象。实现方式如下:1.将内部char类型数组用priovate以及final关键词修饰。2.将String类修饰为final以下是String的JDK源码:public final class String implements java.io.S...原创 2019-07-23 21:07:13 · 285 阅读 · 0 评论 -
Java-ThreadLoal案例以及分析
案例public class Demo_ThreadLocal {private ThreadLocal<Integer> count = new ThreadLocal<Integer>() {//注意这里一定要指定泛型类型 @Override protected Integer initialValue() { return new ...原创 2019-07-18 20:58:16 · 113 阅读 · 0 评论 -
Java并发编程实战-内置锁不是重入的,那么这段代码将发生死锁-以及书籍勘误
引出:在《Java并发编程实战》的2.3.2重入章节中提到了“由于Widget和LoggingWidget中的doSomething方法都是synchronized方法,因此每个doSomething方法在执行前都会获取Widget上的锁。 ”那么问题就来了,为何每个doSomething方法都会需要获取Widget的锁呢?代码:public class Widget {public sy...原创 2019-07-10 19:20:47 · 168 阅读 · 0 评论