轻松学习多线程 07-Guarded Suspension 模式 等待唤醒
Guarded Suspension 模式
Guarded Suspension 模式通过让线程等待保证线程的安全性。
实际案例
类信息概览:
类名
说明
Main.java
方法的总入口
ClientThread.java
发送请求的类
...
2019-01-19 03:21:15 |
Thread
轻松学习多线程 06-Immutable 不可变模式
Immutable
想破坏也破坏不了。
Immutable 可以确保实例状态不发生改变,访问这类实例时不需要执行耗时的互斥处理,可以提升性能。
实际案例
定义
Person.java
不可变对象类
/**
* 不可变类
*
* @author bbhou
* @version 1.0.0
* @since 1.0.0
*/
public final clas...
2019-01-19 03:21:15 |
Thread
轻松学习多线程 05-Single Threaded Execution 模式
# Single Threaded Execution
这座桥,一次只能过一个人。
情景引入
使用程序模拟三个人频繁通过一个只允许通过一个人的门。
每次有人通过,人数统计便会增加。
每次通过,都会校验通过者的信息。
普通方式
定义
Gate.java
定义接口。
/**
* 接口
* @author bbhou
*/
public interface Gate ...
2019-01-19 03:21:15 |
Thread
轻松学习多线程 04-线程间的协作及状态迁移 wait notify
状态迁移图
常言道,一图胜千言。
线程协作
我们前面讲到使用 synchronized 进行线程间的互斥。
但,如果我们需要更加精确地控制。比如:
如果空间为空则写入,如果非空则一直等待。
空间已经为空时,“通知”其他等待的线程。
为此,JDK 为我们准备了 wait()、notify()、notifyAll() 等方法,用于线程的...
2019-01-19 03:21:15 |
Thread
轻松学习多线程 03-多线程的同步与锁
问题的出现
上代码
public class Num {
private int num;
public int getNum() {
return num;
}
public int add(int num) {
this.num += num;
return this.num;
}
}
测...
2019-01-19 03:21:15 |
Thread
轻松学习多线程 02-thread 源码分析
前言
最近想写一个多线程的程序,发现对于 java 的多线程理解还是不够深入。
所以看下源码,学习下基础知识。
接口
作用
接口作为绝对的抽象,非常便于后期拓展。
核心接口
Runnable.java
public
interface Runnable {
/**
* When an object implementing interface <...
2019-01-19 03:21:15 |
Thread
轻松学习多线程 02-多线程的基本机制
定义线程
实现线程的方式,上一章中已经提到。下面使用实现Runnable的方式
/**
* Created by 侯彬彬 on 2016/4/14.
*/
public class NumCounter implements Runnable {
private static int count = 0;
private final int id = coun...
2019-01-19 03:21:15 |
Thread
轻松学习多线程 01-多线程是什么
线程的概念
线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。
每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。
当 Java 虚拟机启动时,通常都会...
2019-01-19 03:21:15 |
Thread