• Java并发编程原理与实战二十八:信号量Semaphore

    时间:2023-11-28 13:50:16

    1.Semaphore简介Semaphore,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类。所谓Semaphore即 信号量 的意思。这个叫法并不能很好地表示它的作用,更形象的说法应该是许可证管理器。其作用在JDK注释中是这样描述的:A counting se...

  • Java并发编程原理与实战三十四:并发容器CopyOnWriteArrayList原理与使用

    时间:2023-08-16 13:40:26

    1、ArrayList的实现原理是怎样的呢?------》例如:ArrayList本质是实现了一个可变长度的数组。假如这个数组的长度为10,调用add方法的时候,下标会移动到下一位,当移动到70%左右的时候。会创建一个新数组,而这个新数组的长度变成2倍或3倍等等。将原来的数据复制到新数组中,新的内容...

  • Java并发编程原理与实战二十五:ThreadLocal线程局部变量的使用和原理

    时间:2023-07-11 23:05:54

    1.什么是ThreadLocalThreadLocal顾名思义是线程局部变量。这种变量和普通的变量不同,这种变量在每个线程中通过get和set方法访问, 每个线程有自己独立的变量副本。线程局部变量不存在多个线程同时对同一个变量的操作,所以不会有线程安全问题。2.ThreadLocal变量的使用pub...

  • Java并发编程原理与实战五:创建线程的多种方式

    时间:2023-07-11 22:58:53

    一、继承Thread类public class Demo1 extends Thread { public Demo1(String name) { super(name); } @Override public void run() { whil...

  • Java并发编程原理与实战三十一:Future&FutureTask 浅析

    时间:2023-07-11 22:51:11

    一、Futrue模式有什么用?------>正所谓技术来源与生活,这里举个栗子。在家里,我们都有煮菜的经验。(如果没有的话,你们还怎样来泡女朋友呢?你懂得)。现在女票要你煮四菜一汤,这汤是鸡汤,有常识的人鸡汤要煲好久滴。如果你先炒四个菜,最后再煲汤,估计都已经一天的时间了。好了。如果我们先煲汤...

  • Java并发编程原理与实战二十:线程安全性问题简单总结

    时间:2023-06-10 18:54:38

    一、出现线程安全性问题的条件•在多线程的环境下•必须有共享资源•对共享资源进行非原子性操作二、解决线程安全性问题的途径•synchronized (偏向锁,轻量级锁,重量级锁)•volatile•JDK提供的原子类•使用Lock(共享锁,排它锁)三、认识的“*锁”•偏向锁Java偏向锁(Biased...

  • 《java并发编程实战》读书笔记13--Java内存模型,重排序,Happens-Before

    时间:2023-06-08 23:55:20

    第16章 Java内存模型终于看到这本书的最后一章了,嘿嘿,以后把这本书的英文版再翻翻。这本书中尽可能回避了java内存模型(JMM)的底层细节,而将重点放在一些高层设计问题,例如安全发布,同步策略等。它们的安全性都来自于JMM。本章将介绍Java内存模型的底层需求以及所提供的保证。16.1 什么是...

  • 《Java并发编程实战》学习笔记 线程安全、共享对象和组合对象

    时间:2023-03-20 14:04:50

    Java Concurrency in Practice,一本完美的Java并发参考手册。查看豆瓣读书推荐:InfoQ迷你书《Java并发编程的艺术》第一章 介绍线程的优势:充分利用多处理器简化模型简化异步事件的处理提供用户界面的响应(时间)线程的风险:安全的风险(不好的事情会发生),提高错误出现的...

  • 【JAVA并发编程实战】5、构建高效且可伸缩的结果缓存

    时间:2023-02-26 18:26:42

    首先创建一个借口,用来表示耗费资源的计算package cn.xf.cp.ch05;public interface Computable<A, V>{ V compute(A arg) throws Exception;}实现接口,实现计算过程package cn.xf.cp.c...

  • Java并发编程实战 03互斥锁 解决原子性问题

    时间:2023-02-14 21:37:43

    文章系列Java并发编程实战 01并发编程的Bug源头Java并发编程实战 02Java如何解决可见性和有序性问题摘要在上一篇文章02Java如何解决可见性和有序性问题当中,我们解决了可见性和有序性的问题,那么还有一个原子性问题咱们还没解决。在第一篇文章01并发编程的Bug源头当中,讲到了把一个或者...

  • java并发编程实战:第八章----线程池的使用

    时间:2023-02-12 06:22:13

    一、在任务和执行策略之间隐性耦合Executor框架将任务的提交和它的执行策略解耦开来。虽然Executor框架为制定和修改执行策略提供了相当大的灵活性,但并非所有的任务都能适用所有的执行策略。依赖性任务:依赖其他同步任务的结果,使其不得不顺序执行,影响活跃性使用线程封闭的任务:在单线程的Execu...

  • 《java并发编程实战》读书笔记2--对象的共享,可见性,安全发布,线程封闭,不变性

    时间:2023-02-04 09:26:27

    这章的主要内容是:如何共享和发布对象,从而使它们能够安全地由多个线程同时访问。内存的可见性确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。上面的程序中NoVisibility可能会持续循环下去,因为读线程可能永远都看不到ready的值。一种更奇怪的现象是NoVisibility可能会...

  • java并发编程实战-Java内存模型

    时间:2023-01-08 17:57:21

    1,JMM(Java类型模型)规定了JVM必须遵循的一组最小保证,这组保证规定了对变量的写入操作在何时将对于其他线程可见。   1.1,平台的内存模型:在共享内存的多处理器体系架构中,每个处理器都拥有自己的缓存,并且定期地与主内存进行协调。要想确保每个处理器都能在任意时刻知道其他处理器正在进行的工作...

  • java并发编程实战-CyclicBarrier和FutureTask使用

    时间:2022-12-18 17:59:56

    import java.util.concurrent.Callable;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.FutureTask;public class FutureTest {public ...

  • [笔记][Java7并发编程实战手册]4.9-4.10在执行器中控制任务的完成和取消任务FutureTask

    时间:2022-12-18 17:59:44

    [笔记][Java7并发编程实战手册]系列目录 简介在前面都是把需要执行的Runnable或则Callable提交给线程池,让线程池来管理任务的生命周期。在本章会学习:怎么取消任务的运行,在任务运行中,任务结束的时候怎么去处理一些事情,比如关闭资源,发送通知等。本章心得 继承可取消任务的Futu...

  • Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)

    时间:2022-12-17 18:59:02

    前面我们说到多线程带来的风险,其中一个很重要的就是安全性,因为其重要性因此,放到本章来进行讲解,那么线程安全性问题产生的原因,我们这节将从底层字节码来进行分析。一、问题引出先看一段代码package com.roocon.thread.t3;public class Sequence { pr...

  • Java7并发编程实战(一) 线程的中断

    时间:2022-12-11 19:41:12

    控制线程中断的方法一般常规是定义一个布尔值,然后while(布尔值) 去执行,当想停止该线程时候,把布尔值设为false.这里我们来看第二种,Interrupt该例子模拟一个线程从1打印到10,然后到5的时候中断线程,主要在线程中捕捉InterruptedException 异常public cla...

  • 2018年java并发编程原理与实战 java多线程与高并发实战

    时间:2022-12-04 18:03:31

    java并发编程是一个优秀的开发者成长过程中绕不过去的挑战。数据库服务,Web服务,大数据处理框架,分布式服务等等,并发编程往往扮演着极其重要的角色。天下武功,唯快不破。要想提高性能,并发必不可少。 市面上大多数讲解并发的视频教程大多基于线程的基础,深入讲解的非常少;对于市面上很多的并发书籍,...

  • 多线程-java并发编程实战笔记

    时间:2022-12-04 18:03:25

    线程安全性 编写线程安全的代码实质上就是管理对状态的访问,而且通常都是共享的,可变的状态。 一个对象的状态就是他的数据,存储在状态变量中,比如实例域或静态域。所谓共享是指一个对象可以被多个线程访问;所谓可变是指变量 的值在其生命周期之内可以改变。 无论何时只要多于一个线程访问给定的状态变量,而且...

  • 《java并发编程实战》读书笔记9--并发程序的测试

    时间:2022-11-19 11:52:16

    第12章 并发程序的测试大致分为两类:安全性测试和活跃性测试12.1 正确性测试找出需要检查的不变性条件和后验条件。接下来将构建一组测试用例来测试一个有界缓存。程序清单12-1给出了BoundedBuffer的实现,其中使用Semaphore来实现缓存的有界属性和阻塞行为。BoundedBuffer...