自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 每天学习一点点20211221/20211222--锁的优化及注意事项

1

2021-12-23 18:45:10 328

原创 每天学习一点点20211219/20211220--保障线程安全的设计技术

保障线程安全的设计技术1.Java 运行时存储空间2.无状态对象3.不可变对象4.线程特有对象5.装饰器模式1.Java 运行时存储空间  Java 运行时(Java runtime)空间可以分为栈区、堆区与方法区(非堆空间)。  栈空间(Stack Space)为线程的执行准备一段固定大小的存储空间,每个线程都有独立的线程栈空间,创建线程时就为线程分配栈空间。在线程栈中每调用一个方法就给方法分配一个栈帧,栈帧用于存储方法的局部变量,返回值等私有数据,即局部变量存储在栈空间中,基本类型变量也是存储在栈

2021-12-22 14:49:37 108

原创 每天学习一点点20211218--ForkJoinPool 线程池

ForkJoinPool 线程池

2021-12-22 09:37:08 219

原创 每天学习一点点20211217--线程池中的异常处理

线程池中的异常处理  在使用 ThreadPoolExecutor 进行 submit 提交任务时,有的任务抛出了异常,但是线程池并没有进行提示,即线程池把任务中的异常给吃掉了,可以把 submit 提交改为 execute 执行,也可以对 ThreadPoolExecutor 线程池进行扩展,对提交的任务进行包装。package com.jason.java.duoxiancheng.threadpool;import java.util.concurrent.*;/** * 自定义线程池类

2021-12-22 00:13:24 147

原创 每天学习一点点20211212/20211213/20211214/20211215/20211216--线程池

线程池线程池JDK对线程池的支持线程池  可以以 new Thread(()->{线程执行的任务}).start(); 这种形式开启一个线程,当 run() 方法运行结束,线程对象会被 GC 释放。  在真实的生产环境中,可能需要很多线程来支撑整个应用,当线程数量非常多时,反而会耗尽 CPU 资源,如果不对线程进行控制和管理,反而会影响程序的性能。线程开销主要包括:创建与启动线程的开销;线程销毁开销;线程调度的开销;线程数量受限 CPU 处理器数量。  线程池就是有效使用线程的一种常用方式。线

2021-12-15 00:04:29 356

原创 每天学习一点点20211210/20211211--线程管理

线程管理 线程组1.创建线程组2.线程组的基本操作3.复制线程组中的线程及子线程组4.线程组的批量中断5.设置守护线程组捕获线程的执行异常注入 Hool 钩子线程线程池线程组  类似于在计算机中使用文件夹管理文件,也可以使用线程组来管理线程。在线程组中定义一组相似(相关)的线程,在线程组中也可以定义子线程组。  Thread 类有几个构造方法允许在创建线程时指定线程组,如果在创建线程时没有指定线程组则该线程就属于父线程所在的线程组。JVM 在创建 main 线程时会为它指定一个线程组,因此每个 Jav

2021-12-12 10:48:39 62

原创 每天学习一点点211207/211208/211209--Lock显示锁

Lock显示锁锁的可重入性ReentrantLock  在 JDK5 中增加了 Lock 锁接口,有 ReentrantLock 实现类,ReentrantLock 锁称为可重入锁,它功能比 synchronized 多。锁的可重入性  锁的可重入是指,当一个线程获得一个对象锁后,再次请求该对象锁时是可以获得该对象的锁的。package com.jason.java.duoxiancheng.reentrantLock;/** * @author Jason */public class

2021-12-08 00:26:37 527

原创 每天学习一点点211205/211206--线程间的通信

线程间的通信等待 / 通知机制1.什么是等待/通知机制2.等待/通知机制的实现3.interrupt()方法会中断 wait()等待 / 通知机制1.什么是等待/通知机制  在单线程编程中,要执行的操作需要满足一定的条件才能执行,可以把这个操作放在 if 语句块中。  在多线程编程中,可能 A 线程的条件没有满足只是暂时的,稍后其他的线程 B 可能会更新条件使得 A 线程的条件得到满足。可以将 A 线程暂停,直到它的条件得到满足后再将 A 线程唤醒,伪代码:atomics{ //原子操作 whi

2021-12-06 23:53:40 906

原创 每天学习一点点20211203/211204--原子变量类

原子变量类  原子变量类基于 CAS 实现的,当对共享变量进行 read-modify-write 更新操作时,通过原子变量类可以保障操作的原子性与可见性。对变量的 read-modify-write 更新操作是指当前操作不是一个简单的赋值,而是变量的新值依赖变量的旧值,如自增操作 i++,由于 volatile 只能保证可见性,无法保障原子性,原子变量类内部就是借助一个 volatile 变量,并且保障了该变量的 read-modify-write 操作的原子性,有时把原子变量看作增强的 volatil

2021-12-05 23:18:02 937

原创 每天学习一点点20211202--CAS

CAS  CAS(Compare And Swap)是由硬件实现的。  CAS 可以将 read-modify-write 这类的操作转换为原子操作。  i++ 自增操作包括三个子操作:    从主内存读取 i 变量    对 i 的值加 1    再把加 1 之后的值保存到主内存  CAS原理:在把数据更新到主内存时,再次读取主内存变量的值,如果现在变量的值与期望的值(操作起始时读取的值)一样就更新。使用 CAS 实现线程安全的计数器package com.jason.java.duox

2021-12-02 23:40:29 61

原创 每天学习一点点211201--volatile关键字

轻量级同步机制:volatile关键字volatile 的作用volatile 使变量在多个线程之间可见。volatile 与 synchronized 比较volatile 关键字是线程同步的轻量级实现,所以 volatile 性能肯定比 synchronized 要好;volatile 只能修饰变量,而 synchronized 可以修饰方法,代码块。随着 JDK 新版本的发布,synchronized 的执行效率也 有较大的提升,在开发中使用 sychronized 的比率还是很大的。(斜

2021-12-02 00:36:18 233 1

转载 SQL:将一个表中查出来的数据插入到另一个表中

1、假如baiA表存在insert into A(a,b,c) (select a,b,c from B) 2、假如A表不存在select a,b,c into A from B 3、假如需要跨数据库insert into ADB.[dbo].A(a,b,c) (select a,b,c from BDB.[dbo].B)

2021-12-01 15:10:53 6198 4

原创 每天学习一点点211129/211130--synchronized关键字

内部锁:synchronized 关键字  Java 中每个对象都有一个与之关联的内部锁(intrinsic lock)。这种锁也称为监视器(Monitor),这种内部锁是一种排他锁,可以保障原子性,可见性与有序性。  内部锁是通过 synchronized 关键字实现的。synchronized 关键字修饰代码块,修饰方法。修饰实例方法就称为同步实例方法,修饰静态方法就称为同步静态方法。  修饰代码块的语法:synchronized(对象锁){ 同步代码块,可以在同步代码块中访问共享数据}

2021-11-30 00:08:31 168

原创 每天学习一点点211128--线程同步

线程同步线程同步机制简介  线程同步机制是一套用于协调线程之间的数据访问的机制,该机制可以保障线程安全。Java 平台提供的线程同步机制包括:锁,volatile 关键字,final 关键字,static 关键字以及相关的API,如 Object.wait() / Object.notify()等。锁概述  线程安全问题产生的前提是多个线程并发访问共享数据。  将多个线程对共享数据的并发访问转换为串行访问,即一个共享数据一次只能被一个线程访问。锁就是用这种思路来保障线程安全的。  锁(Loc

2021-11-29 23:27:53 159

原创 每天学习一点点211127--线程安全问题

线程安全问题非线程安全主要是指多个线程对同一个对象的实例变量进行操作时,会出现值被更改,值不同步的情况。线程安全问题表现为三个方面:原子性,可见性和有序性原子性原子(Atomic)就是不可分割的意思,原子操作的不可分割有两层含义:访问某个共享变量的操作从其他线程来看,该操作要么已经执行完毕,要么尚未发生。访问同一组共享变量的原子操作是不能够交错的。Java 有两种方式实现原子性:一种是使用锁;另一种利用处理器的 CAS(Compare and Swap)指令。锁具有排他性,保证共享变

2021-11-29 22:51:45 162

原创 每天学习一点点211126--多线程的优劣

多线程编程的优势与存在的风险优势:提高系统的吞吐率(Throughout)。多线程编程可以使一个进程有多个并发的操作。提高响应性。Web服务器会采用一些专门的线程负责用户的请求,缩短了用户的等待事件。充分利用多核处理器资源,通过多线程可以充分利用CPU资源。问题与风险:线程安全问题。多线程共享数据时,如果没有采取正确的并发访问控制措施,就可能会产生数据一致性问题,如读取脏数据(过期的数据),如丢失数据更新。线程火星问题,由于程序自身的缺陷或者由资源稀缺性导致线程一直处于非 RUNN

2021-11-29 22:32:25 141

原创 每天学习一点点211125--线程生命周期

多线程线程的生命周期线程的生命周期线程的生命周期是线程对象的生老病死,即线程的状态。线程的生命周期可以通过 getState() 方法获得,线程的状态是 Thread.State 枚举类型定义的。又以下几种:NEW 新建状态。创建了线程对象,在调用 start() 启动之前的状态。Thread state for a thread which has not yet started.RUNNABLE 可运行状态。是一个复合状态,包含 READY 和 RUNNING 状态。READY 状态该

2021-11-29 22:23:23 66

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除