随笔分类 - Java / 并发编程
synchronized的四种锁状态
摘要:Java 多线程的锁都是基于对象的,Java 中的每一个对象都可以作为一个锁。 类锁,其实就是 Class 对象的锁。 Class 对象是一种特殊的 Java 对象,代表了程序中的类和接口。Java 中的每个类型(包括类、接口、数组以及基础类型)在 JVM 中都有一个唯一的 Class 对象与之对应
synchronized关键字
摘要:在 Java 中,关键字 synchronized 可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作),同时我们还应该注意到 synchronized 的另外一个重要的作用,synchronized 可保证一个线程的变化(主要是共享数据的变
volatile关键字
摘要:volatile 可以保证可见性,但不保证原子性: 当写一个 volatile 变量时,JMM 会把该线程在本地内存中的变量强制刷新到主内存中去; 这个写操作会导致其他线程中的 volatile 变量缓存无效。 volatile 会禁止指令重排 重排序需要遵守的规则: 重排序不会对存在数据依赖关系的
JMM
摘要:Java 内存模型 Java 内存模型(Java Memory Model,JMM)定义了 Java 程序中的变量、线程如何和主存以及工作内存进行交互的规则。它主要涉及到多线程环境下的共享变量可见性、指令重排等问题,是理解并发编程中的关键概念。 两种并发模型: 如何通信 如何同步 消息传递并发模型
线程组和线程优先级
摘要:线程组 每个 Thread 必然存在于一个 ThreadGroup 中,Thread 不能独立于 ThreadGroup 存在。执行main()方法的线程名字是 main,如果在 new Thread 时没有显式指定,那么默认将父线程的线程组设置为自己的线程组。 public static void
Java线程的六种状态
摘要:OS 中的进程/线程状态 操作系统中的进程/线程状态转换图: Java 线程的六个状态: // Thread.State 源码 public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; } NEW
获取线程的执行结果
摘要:无返回值的 Runnable public interface Runnable { public abstract void run(); } public static void main(String[] args) throws ExecutionException, Interrupted
Java多线程入门
摘要:创建线程的三种方式 继承Thread类 class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(getName() + " " +
java CAS及各种锁
摘要:CAS CAS 缺点:循环会耗时;一次性只能保持一个共享变量的原子性;ABA问题 package juc.cas; import java.util.concurrent.atomic.AtomicInteger; public class CASDemo { // CAS compareAndSe
线程基础
摘要:线程停止 //建议线程正常停止,利用次数,不建议死循环 //建议使用标志位 //不要使用stop或destory等jdk不建议使用的方法 public class MyStop implements Runnable{ private boolean flag = true; @Override p
java线程实现的三种方式以及静态代理
摘要:线程 一个进程中若开辟多个线程,线程的运行由调度器控制,先后顺序不能人为干预。 实现方式 继承 Thread类 调用run方法,只有主线程一条路 调用start方法,主线程和子线程并行交替执行 start方法是进入就绪态 public class MyThread extends Thread{ @