首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Java
学而不思则忘
创建于2022-09-25
订阅专栏
Java基础知识
等 1 人订阅
共43篇文章
创建于2022-09-25
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Java线程状态
六种线程状态及转化关系 java.lang.Thread.State枚举类中定义了六种线程的状态,可以调用线程 Thread 中的getState()方法获取当前线程的状态。 New:尚未启动 Run
ThreadLocal详解
ThreadLocal 概述 ThreadLocal 是一个存储线程本地副本的工具类。 要保证线程安全,不一定非要进行同步。同步只是保证共享数据争用时的正确性,如果一个方法本来就不涉及共享数据,那么自
如何正确停止线程
interrupt 停止线程 对于 Java 而言,最正确的停止线程的方式是使用 thread.interrupt();。Java 并不提供强制停止线程的能力。原因是:贸然强制停止线程可能会造成一些安
单例模式的几种写法
1. 饿汉式(线程安全) 容易产生垃圾对象。 **2. 懒汉式(线程不安全) ** 3. 懒汉式(线程安全) 但是,对整个方法加锁,锁的粒度太大,效率比较低 4. 懒汉式(优化加锁,但不可行) 5.
多线程顺序打印ABC
1. Lock锁方法 1.1 基本思路 通过ReentrantLock我们可以很方便的进行显式的锁操作,即获取锁和释放锁,对于同一个对象锁而言,统一时刻只可能有一个线程拿到了这个锁,此时其他线程通过l
synchronized不捕获异常会导致锁释放
运行下面代码,如果不对异常处进行捕获,则结果如下: 加上异常捕获:运行下面代码,如果不对异常处进行捕获,则结果如下: 加上异常捕获:运行下面代码,如果不对异常处进行捕获,则结果如下: 加上异常捕获:
一个Thread对象能不能调用两次start
执行下面这段程序: 结果如下: 发现只启动了一个线程,另一个线程抛出IllegalThreadStateException异常。这是怎么回事呢? 原因 Java的线程是不允许启动两次的,第二次调用必然
Java并发List
一. 并发场景下的List 1. CopyOnWriteArrayList CopyOnWriteArrayList 是线程安全的 ArrayList。CopyOnWrite 意思为写的时候会将共享变
volatile关键字详解
volatile关键字 volatile 的作用 保证可见性: 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个共享变量,另外一个线程能读到这个修改的值。 禁止指令重排:不管怎么重排序
Java多线程中start和run方法的区别
start()和run()方法的主要区别在于: 当程序调用start()方法,一个新线程将会被创建,并且在run()方法中的代码会在新线程上运行。 当直接调用run()方法时,程序并不会创建新线程,r
抽象同步队列AQS概述
1. 抽象同步队列AQS概述 1. AQS的数据结构 AQS 继承自 AbstractOwnableSynchronize,是一个FIFO的双向队列。 state - AQS 使用一个整型的 vola
常用并发工具类介绍
它们分别是: 信号量 Semaphore 倒计时门栓 CountDownLatch 屏障 CyclicBarrier 所以,既然是工具类,那么必然是离不开特定的场景的,于是相互之间没有谁优谁劣,只有谁
深入理解CAS
1. CAS简介 CAS:Compare And Swap,即比较再交换。 它是一条 CPU 并发原语。原语的执行必须是连续的,在执行过程中不允许中断,也就是说CAS是一条原子指令,不会造成所谓的数据
两个线程交替打印大小写字母
1. 只使用synchronized 2. 使用volatile的可见性(这里不对flag添加volatile也可以) 3. 使用synchronized和wait/notify
基于AQS实现自定义同步器
下面是基于AQS实现的不可重入的独占锁: state为1表示锁已经被某一个线程持有,由于是不可重入锁,所以不需要记录持有锁的线程获取锁的次数。 下面是模拟生产者-消费者的代码:
ConcurrentHashMap和CopyOnWriteArrayList
一、并发容器简介 并发容器 对应的普通容器 描述 ConcurrentHashMap HashMap Java 1.8 之前采用分段锁机制细化锁粒度,降低阻塞,从而提高并发性;Java 1.8 之后基
Java线程同步的方法
为什么需要线程同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证
Java创建线程的方式
Java有四种创建线程的方式,分别为实现Runnable接口的run方法,继承Thread类并重写run方法,使用FutureTask方式,利用线程池ExecutorService、Callable、
ThreadPoolExecutor核心设计与实现
1. 总体设计 Java中的线程池核心实现类是ThreadPoolExecutor,本章基于JDK 1.8的源码来分析Java线程池的核心设计与实现。我们首先来看一下ThreadPoolExecuto
下一页