03 2021 档案
摘要:Java volatile关键字详解 volatile是java中的一个关键字,用于修饰变量。被此关键修饰的变量可以禁止对此变量操作的指令进行重排,还有保持内存的可见性。 简言之它的作用就是: 禁止指令重排 保持内存的可见性 禁止指令重排 CPU在执行代码时,为了提高执行效率,有时会将代码乱序执行。
阅读全文
摘要:线程安全问题是一个老生常谈的问题,那么多线程环境下究竟有那些问题呢?这么说吧,问题的形式多种多样的,归根结底的说是共享资源问题,无非可见性与有序性问题。 1. 可见性 可见性是对于内存中的共享资源来说。线程作为单一的控制流,在运行的程序内线程必须拥有一些资源作为开销。例如线程的堆栈和私有的程序计数器
阅读全文
摘要:FutureTask浅析 FutureTask是与Java多线程编程关联密切的一个概念。面试中也有关于FutureTask的问题——Java创建线程的几种方式: 编写类继承Thread。 编写类继承Runnable,然后将该类的作为参数传递给Thread的构造函数。 使用FutureTask。 那么
阅读全文
摘要:生产者消费者问题 背景 在并发编程中,生产者消费者问题(producer/consumer)是一个经典的老生常谈的问题,有时也称为有界缓冲区问题。 问题的基本背景假设是:我们有一个固定大小的缓冲区,这个缓冲区分别有两种工作性质不同的线程去操作。其中一种线程负责向缓冲区中写入数据,我们称之为生产者线程
阅读全文
摘要:题目要求 给一个数组nums和一个值val你需要原地移除所有值为val的元素,并返回移除后数组的新长度。 不能使用额外的数组空间,你必须使用O(1)的空间复杂度完成对输入数组的修改。 其中元素的顺序可以改变,你不需考虑数组中超出新长度后面的元素。 示例1: 输入:nums = [3, 2, 2, 3
阅读全文

浙公网安备 33010602011771号