![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
文章平均质量分 64
寻找那道光
这个作者很懒,什么都没留下…
展开
-
多线程基础面试题目
sleep join yiled区别sleep会让线程睡眠指定的时间,释放CPU时间片;join本质是wait/notify 本质是让线程的执行结果对被阻塞的线程可见yiled 让出时间片,触发CPU的重新调度Java中可以创建volatile数组吗可以创建,但是volatile只是对引用可见,对数组中的元素,不是volatile的,可以通过代码进行验证,举例:反汇编需要设置 JVM参数:-server -Xcomp -XX:+UnlockDiagnosticVMOptions -X..原创 2021-12-03 23:13:02 · 626 阅读 · 0 评论 -
线程的状态与生命周期
代码示例package com.example.springbootthreaddemo.demo02;import com.mysql.cj.util.TimeUtil;import java.util.concurrent.TimeUnit;public class Demo { public static void main(String[] args) { new Thread(()->{ while(true){ .原创 2021-11-21 22:50:16 · 328 阅读 · 0 评论 -
JUC工具类Semaphore
Semaphore 字面意思是信号量,Semaphore 维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止;线程可以通过release()来释放它所持有的信号量许可。Semaphore可以起到“限流”的作用。案例:6辆汽车抢占三个车位package com.lchtest.juc.assistant;import java.util.concurrent.Semaphore;import原创 2021-08-15 17:16:09 · 136 阅读 · 0 评论 -
JUC工具类CyclicBarrier
CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。案例:参加赛的运动员,等发令枪响了才能起跑。CyclicBarrier 提供的操作:CyclicBarrier(int parties)// 创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,但它不会在启动 barrier 时执行预定义的操原创 2021-08-15 17:08:12 · 114 阅读 · 0 评论 -
JUC工具类CountDownLatch
1. CountDownLatchCountDownLatch 是JUC提供的一个同步工具类,允许一个或者多个线程一直等待,直到其他线程的操作都执行完成之后再继续往下执行。CountDownLatch是通过“共享锁”实现的。在创建CountDownLatch中时,会传递一个int类型参数count,该参数是“锁计数器”的初始状态,表示该“共享锁”最多能被count给线程同时获取。当某线程调用该CountDownLatch对象的await()方法时,该线程会等待“共享锁”可用时,才能获取“共享锁”进而继续运原创 2021-08-15 16:20:59 · 103 阅读 · 0 评论 -
JUC-Callable与Future接口
创建线程的四种方式(1) new Thread(2) 实现Runnable接口(3) Callable接口—— 可以拿到线程的执行结果(4) 线程池Runnable 缺少的一项功能是,当线程终止时(即 run()完成时),我们无法使线程返回结果。为了支持此功能,Java 中提供了 Callable 接口,而Callable 接口需要搭配Future一起使用package com.lchtest.juc.callable;import java.util.concurrent.Callable;原创 2021-08-15 11:29:41 · 96 阅读 · 0 评论 -
JUC-集合线程安全
List的线程安全先来看这么一段代码,我们创建了一个ArrayList,在循环中通过两个线程对这个list进行并非修改与读的操作package com.lchtest.juc;import java.util.*;import java.util.concurrent.CopyOnWriteArraySet;public class CopyOnWriteArraySetTest { public static void main(String[] args) { Lis原创 2021-08-15 10:41:11 · 136 阅读 · 0 评论 -
死锁的案例演示
package com.lchtest.juc;/** * 两个或两个以上的线程,因为竞争同一个资源而造成相互等待的现象 * 产生死锁的原因: * */public class DeadLock { static Object a = new Object(); static Object b = new Object(); public static void main(String[] args) { new Thread(() ->...原创 2021-08-15 09:42:56 · 135 阅读 · 0 评论 -
JUC-线程间通信
多线程编程步骤:创建资源类,在资源类中封装属性和操作方法如果是生产者消费者场景:在资源类的操作方法中,要完成 判断, 干活, 通知 操作创建多个线程,调用资源类的操作方法防止虚假唤醒,线程间通信场景下,资源类操作方法中的判断要使用while循环来判断,而不是if判断场景1: 假设有一个初始变量0,同时有两个用户线程,一个线程对变量进行加1,另一个对变量减1,两个线程交替执行(甚至更多线程)(1)使用Object对象的wait和notify来实现package com.lchtest.原创 2021-08-14 23:36:59 · 116 阅读 · 0 评论 -
JUC-Lock接口的基本使用
1. Synchronized回顾synchronized 是 Java 中的关键字,是一种同步锁。它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象(锁的Class对象);修改一个类,其作用的范围是 synchronized 后面括原创 2021-08-14 22:34:27 · 135 阅读 · 0 评论 -
线程基本概念
进程和线程进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。**线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际.原创 2021-08-14 11:43:37 · 133 阅读 · 0 评论 -
线程池的使用及原理
通过线程池来创建线程: // 一池多线程,参数为线程的数量 ExecutorService threadPool1 = Executors.newFixedThreadPool(5); // 单线程 的线程池 ExecutorService threadPool2 = Executors.newSingleThreadExecutor(); // 可扩容线程池 扩容机制? 当处理的任务数量不同时,线程池的数量也不同 Ex.原创 2021-08-14 11:18:06 · 136 阅读 · 0 评论 -
并发编程-3-volatile那些事
下面这段代码,演示了一个使用 volatile 以及不使用volatile 这个关键字,对于变量更新的影响package org.example.volatiletest;public class VolatileTest { public static /*volatile*/ boolean stop = false; public static void main(String[] args) throws InterruptedException { Thr原创 2020-05-25 23:56:26 · 350 阅读 · 0 评论 -
使用JVM的HSDIS插件对java代码进行反汇编
假设要对下面代码进行反汇编:package org.example.volatiletest;public class VolatileTest { public static volatile boolean stop = false; public static void main(String[] args) throws InterruptedException { Thread t = new Thread(()->{ in原创 2020-05-24 15:36:27 · 416 阅读 · 0 评论 -
并发编程-2-并发编程带来的问题
本文主要内容:线程的上下文切换线程的安全性: 原子性 ,有序性 可见性线程死锁的产生以及如何避免死锁java中的同步锁sychronized: sychronized基本使用,实现原理,锁升级的过程1. 多线程访问共享变量带来的线程安全问题package org.example.demo;public class Test01 { public static int count=0; public static void incr(){ try {原创 2020-05-20 13:00:24 · 186 阅读 · 0 评论 -
并发编程-1-初步认识多线程
1. 线程概念1. 并发的发展历程早期的计算机穿孔打卡同一时刻只能运行一个程序,程序输入过程中,计算机处于空闲状态晶体管和批处理系统:a: 程序员把卡片拿到 1401 机 b: 1401 机把批处理作业读到磁带上c: 操作员把输入磁带送到熬 7094 机 d: 7094 机进行计算e: 操作员把输出磁带送到 1401 机 f:1401 机打印输出缺点:某一个作业因为等待磁盘或其他IO操作而暂停时,CPU只能阻塞直到该IO完成,IO操作多的场景,CPU资源浪费严重集成电路和多道程序设计—原创 2020-05-19 11:03:21 · 217 阅读 · 0 评论