并发线程
java多线程
Sean_徐
不忘初心
展开
-
理解Synchronized锁升级
利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现为以下3种形式。- 对于普通同步方法,锁是当前实例对象。- 对于静态同步方法,锁是当前类的Class对象。- 对于同步方法块,锁是Synchonized括号里配置的对象。```javapublic class SynchronizedTest {int i = 0;public void test1(){synchronized (Synchronize...原创 2020-06-04 16:55:00 · 494 阅读 · 0 评论 -
深入了解ReentrantLock
在介绍ReentrantLock的时候,首先我们要先了解锁的释放和获取,在java内存中究竟怎么处理的。锁的释放和获取的内存语义当线程释放锁时,java内存模型(以下简称JMM)会把线程对应的本地内存中的共享变量刷新到主内存中。当线程获取锁时,JMM会把该线程对应的本地内存置为无效,从而使得监视器保护的临界区代码必须从主内存中读取共享变量。对比锁释放-获取的内存语义与volatile写-读的内存语义可以看出:锁释放与volatile写有相同的内存语义;锁获取与volatile读有相同的内存语义。原创 2020-06-02 11:49:19 · 513 阅读 · 0 评论 -
四种常用线程池及自定义线程池参数详细分析
一个ExecutorService ,使用可能的几个合并的线程执行每个提交的任务,通常使用Executors工厂方法配置。线程池解决两个不同的问题:由于每个任务的调用开销减少,它们通常在执行大量异步任务时提供改进的性能,并且它们提供了一种限制和管理资源(包括执行一个任务。 每个ThreadPoolExecutor还维护一些基本统计信息,例如已完成任务的数量。常用的更方便的Executors工厂...原创 2020-03-24 16:38:16 · 1775 阅读 · 0 评论 -
线程状态转换
此图来源于《JAVA并发编程的艺术》一书中,线程是会在不同的状态间进行转换的,java线程线程转换图如上图所示。线程创建之后调用start()方法开始运行,当调用wait(),join(),LockSupport.lock()方法线程会进入到WAITING状态,而同样的wait(long timeout),sleep(long),join(long),LockSupport.parkNanos(...原创 2019-04-18 10:44:10 · 417 阅读 · 0 评论 -
创建线程的三种方法
1. 通过继承Thread类,重写run方法;2. 通过实现runable接口;3. 通过实现callable接口这三种方式,下面看具体demo。package com.xuan.thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java....原创 2019-02-21 15:36:46 · 126 阅读 · 0 评论