Java的并发编程:利用Lock和synchronized创建一个可重入锁

Break易站已经介绍了各种锁的使用,我们可以不可以自己来创建一个MyLock.java来创建一把锁呢?其实是可以的,我们可以用实现lock接口来创建属于自己的一把锁。 利用Lock接口和synchronized创建一个锁 用Java的并发编程:Lock接口的认识和使用中的例子,不过创建我们自己的MyLock, 测试代 ...阅读更多

Posted on

Java的并发编程:Lock接口的认识和使用

为了保证线程的安全,主要有目前了解到了有一下几个方面: synchronized 是很多地方都可以用到的,不过这个是比较重量级的 volatile 轻量级,比较局限,修饰修饰变量,保证可见性,并不能保证原子性 AtomicInteger..... 轻量级,比较局限,要用判断等的逻辑操作的时候,Atomic就比较局限了 ...阅读更多

Posted on

Java的并发编程:JDK5原子类的操作及其原理

在Java的多线程中,synchronized关键字和volatile关键字都能保证其原子性。但是呢,在JDK5之后呢,就提供了原子类来保证事务的原子性,主要的JDK5提供的原子类操作有 原子类更新基本类型 原子类更新数组 原子类更新抽象类型 原子类更新字段 这篇文章主要举例说明原子类如何进行基本的原子性操作。 JDK ...阅读更多

Posted on

Java的并发编程:深入理解volatile的原理和使用

我们已经知道,synchronized关键字可以保证线程的安全,但是相对来说,synchronized关键字还是比较重量级的锁。虽然,JDK6之后引入了偏向锁,轻量级锁和重量级锁 ,但是还是比较重量的。而volatile关键字的引入就是为了轻量化。 Java中volatile的原理 volatile主要有下面几个特征: ...阅读更多

Posted on

Java的并发编程:理解Java的重入锁,自旋锁和死锁

这篇文章主要讲的是Java的三种锁:重入锁,自旋锁和死锁。对于最经常发生在多线程的就是Java的死锁。 我们先从定义来看一下这三个锁的概念: 重入锁:也叫做递归锁,指的是在同一线程内,外层函数获得锁之后,内层递归函数仍然可以获取到该锁。换一种说法:同一个线程再次进入同步代码时,可以使用自己已获取到的锁。作用是防止在同一 ...阅读更多

Posted on

Java的并发编程:单例模式与线程安全性的解析

对于单例模式,主要是有饿汉式和懒汉式这两种模式,而这篇文章主要是讲 饿汉式 (没有线程安全性问题) 懒汉式(双重检查加锁解决线程安全性问题) 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。现在,我 ...阅读更多

Posted on

Java的并发编程:偏向锁,轻量级锁和重量级锁

Java锁的种类:偏向锁,轻量级锁和重量级锁 我们在Java的并发编程:从synchronized保证线程安全的原理 这篇文章中,已经说到了synchronized可以用锁来保证线程的安全问题,那么,我们这一节要说的就是锁的分类。以前是只有重量级锁这个分类,但是自从JDK6引入了偏向锁和轻量级锁之后,锁的种类就有下面三 ...阅读更多

Posted on

Java的并发编程:从synchronized保证线程安全的原理

在Java的并发编程:线程的安全性问题的分析这篇文章中说到了synchronized可以保证线程的安全性,那么,这篇文章主要是说synchronized保证线程安全的原理,为什么加上synchronized就能保证线程的安全呢?我们可以从两个角度出发去看这个问题,一个是从理论的层面,一个是从JVM的层面。 从理论的层面 ...阅读更多

Posted on

Java的并发编程:线程的安全性问题的分析

Java线程的安全性问题的分析 在说到线程的安全性问题的时候,我们来看下面这一段代码: [java] package com.breakyizhan.thread.t3; public class Sequence { private int value; public int getNext() { return v ...阅读更多

Posted on

Java的并发编程:从线程的优先级看线程的饥饿问题

这是Java并发编程原理,我们可以来了解一下,Java线程为什么会产生线程饥饿的问题,主要原因有下面三个: 高优先级吞噬所有低优先级的CPU时间片 线程被永久堵塞在一个等待进入同步块的状态 等待的线程永远不被唤醒 如何尽量避免线程饥饿问题 线程的饥饿问题我们是没有办法永远解决的,只能尽量去避免线程的饥饿问题,主要有下面 ...阅读更多

Posted on

Java的并发编程:多线程的活跃性的问题: 死锁,饥饿和活锁

这是Java并发编程原理,本文来了解一个非常重要的问题,就是我们的线程安全性问题。刚才了解的我们线程安全性问题之前,我们先了解一下关于线程所带来的风险这个问题,我们之前也提到过那么一回事,我们说线程不光有它的优势,同样它也会带来一定的风险。那么我们当时提到了三点,分别是 第一点就是线程安全性问题; 第二个是活跃性问题; ...阅读更多

Posted on

Java的并发编程:创建线程的多种方式

这篇文章主要讲的是Java的并发编程:创建线程的多种方式,如果不了解线程之间的各个状态的话,可以查看:Java的并发编程:线程状态以及各个线程状态的关系这篇文章。 Java的并发编程:创建线程的多种方式有下面这几种方式: 继承Thread类 实现Runnable接口 匿名内部类的方式 带返回值的线程 定时器(quart ...阅读更多

Posted on