java
糖送圆茗亲
学习
展开
-
15_原子操作
CAS 原子操作锁锁有两类:悲观锁:synchronized是独占锁,级悲观锁,会导致其他所有需要锁的线程挂起,等待线程释放锁乐观锁:每次不加锁而是假设有冲突而去王城某项操作,如果因为冲突失败就重试,直到成功为止CASCompare And Swap —— 比较并交换是乐观锁的一种实现三个值:一个当前内存值,旧的预期值A,将更新的值B,先获取到内存当中当前的内存值V,再将V与...原创 2020-04-11 00:02:36 · 138 阅读 · 0 评论 -
14_可重入锁、不可重入锁
可重入锁、不可重入锁可重入锁可以延续使用不可重入锁不可以延续使用不可重入锁简单实现package com.tsymq.thread.advanced;// 不可重入锁class UnReentrantLock { // 是否被锁定 private boolean isLocked = false; // 锁定 public synchronize...原创 2020-04-11 00:02:20 · 123 阅读 · 0 评论 -
13_ThreadLocal
ThreadLocal 线程独立的数据线程拥有自己的数据,使用自己的局部变量比使用全局变量好局部变量只有线程自己可见,不会影响其他线程ThreadLocal能放一个线程级别的变量,其本身能被多个线程共享使用(可共享给子线程),并且能达到线程安全的目的常用方法 get / set / initialValue建议将ThreadLocal定义为private static...原创 2020-04-11 00:00:37 · 131 阅读 · 0 评论 -
12_happenBefore
HappenBefore指令重排:执行代码的顺序可能与编写的代码顺序不一致,即虚拟机优化代码,则为指令重排,目的是为了优化程序性能happen-before:编译器或运行时环境为了优化程序性能而采取的对指令重新排序执行的一种手段例子:package com.tsymq.thread.advanced;public class HappenBefore { private sta...原创 2020-04-11 00:00:19 · 103 阅读 · 0 评论 -
11_quartz简单使用示例
quartz框架基本使用示例package com.tsymq.thread.advanced;import static org.quartz.DateBuilder.evenMinuteDate;import static org.quartz.DateBuilder.evenSecondDateAfterNow;import static org.quartz.JobBuilde...原创 2020-04-10 23:56:11 · 150 阅读 · 0 评论 -
10_多线程_定时调度
多线程定时调度 Timed Scheduling某一个有规律的时间点执行某个任务简单示例:package com.tsymq.thread.advanced;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class TimedScheduling { publi...原创 2020-04-10 23:55:17 · 110 阅读 · 0 评论 -
09_并发协作
线程协作、线程通信3个解决线程中间通信问题的方法方法描述final void wait()线程一直等待,直到其他线程通知,与sleep不同,会释放锁final void wait(long timeout)指定等待的毫秒数final void notify()唤醒一个处于等待状态的线程final void notifyAll()唤醒同一个对象上所有...原创 2020-04-10 23:54:35 · 84 阅读 · 0 评论 -
08_死锁-产生与解决
死锁——产生与解决1、死锁多个线程各自占用一些资源,并且相互等待其他线程占用的资源才能进行,而导致两个或多个线程都在等待对方释放资源,所以度停止执行了。产生的原因:过多的同步可能造成死锁某一个同步块同时拥有两个以上对象的锁时,就可能发生死锁问题死锁出现的情况:package com.tsymq.thread.concurrnet;public class DeadLock { ...原创 2020-04-10 23:54:03 · 66 阅读 · 0 评论 -
07_并发、同步、安全
并发:多个线程同时操作同一个对象线程同步队列 + 锁 = 同步为保证数据在方法中被访问的正确性,在访问时加入锁机制,当一个线程获得资源的访问权时,会加上排他锁,独占资源,其他线程必须等待,使用后释放锁即可但是就存在一些问题:一个线程持有锁时会导致其他所有需要此锁的线程挂起在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题如果一个优先级高的线程等待一个优先级...原创 2020-04-10 23:53:19 · 85 阅读 · 0 评论 -
06_其他方法
Thread类其他常用方法1、isAlive()线程是否存活是:true否:falseSystem.out.println(Thread.currentThread().getName() + "存活:"+Thread.currentThread().isAlive());2、setName()给线程起名字MyInfo mi = new MyInfo();Thread t ...原创 2020-04-10 23:52:53 · 92 阅读 · 0 评论 -
05_守护线程
守护线程(DeamonThread)线程分为用户线程和守护线程两种默认所有的线程都是用户线程守护线程是为用户线程服务的虚拟机必须确保用户线程执行完毕虚拟机如果要停止不需要等等守护线程执行完毕(如后台记录操作日志、监控内存使用等)示例:一个人一直在工作,时间会一直在过去,但工作有完成的时候,时间却不会停,但可以知道完成工作花了多少时间,从工作开始时就开始计时,...原创 2020-04-10 23:51:12 · 58 阅读 · 0 评论 -
04_线程优先级
线程优先级线程调度器按照线程优先级来决定应调度那个线程来执行优先级的设定建议在start()调用前优先级低只是表示获得调度的概率低,并不是绝对先调用优先级高的线程后调用优先级低的优先级不代表绝对的调度先后顺序优先级用数值 1 - 10 来表示Thread类提供了三个常量NORM_PRIORITY —— 5 默认MIN_PRIORITY —— 1MAX_PRIORITY —— ...原创 2020-04-10 23:50:44 · 119 阅读 · 0 评论 -
03_线程状态
线程状态1、五大状态:新生状态就绪状态运行状态阻塞状态死亡状态1.1、新生状态当线程被创建以后即进入新生状态,表示线程可执行1.2、就绪状态导致线程进入就绪状态的原因:调用了start()方法阻塞状态解除调用yield()方法,线程中断一下,让出对cpu的占用jvm本身将cpu切换到其他线程1.3、运行状态运行状态一定是被cpu调度到,线程进入运行状态1....原创 2020-04-10 23:49:43 · 98 阅读 · 0 评论 -
02_Lambda表达式简化线程使用
使用Lambda表达式简化线程的使用当线程只需使用很少的次数、很简单时,可使用Lambda表达式package com.tsymq.thread;public class LambdaThread { public static void main(String[] args) { // 匿名内部类,必须借助接口或父类 new Thread(new...原创 2020-04-10 23:44:40 · 145 阅读 · 0 评论 -
01_线程基础
1、进程与线程(Process & Thread)程序:指令和数据的集合,其本身没有运行含义,是静态概念进程:是执行程序的一次执行过程,是动态概念,是系统分配资源的单位线程:一个进程中至少有一个线程,是CPU调度和执行的单位2、线程创建方式继承Thread类(重点)实现Runnable接口(重点)实现Callable接口2.1、继承Thread类创建线程类以继承...原创 2020-04-10 23:43:59 · 77 阅读 · 0 评论 -
设计模式——抽象工厂模式
设计模式——抽象工厂模式1. 理解抽象工厂模式抽象工厂模式并不想其他工厂模式那样可以自由增加新产品,可以容易的调整生产的流水线,它是用来生产不同产品族的全部产品的抽象工厂模式可以看做是工厂模式的升级版,它是可以生产工厂的超级工厂,在有很多个业务品牌、业务分类时,通过抽象工厂模式生产需要的对象是一种非常好的解决方案。也可以这样来理解抽象工厂模式2. 使用抽象工厂模式场景:现在有分...原创 2019-09-14 18:33:30 · 200 阅读 · 0 评论 -
设计模式——工厂方法模式
设计模式——工厂方法模式1.面向对象设计的基本原则在了解这个模式之前,先简单了解一下面向对象设计的基本原则OCP(开闭原则:Open-Closed Principe):一个软件的实体应当对扩展开放,对修改关闭。这就意味着,以后要扩展新的功能,不能对当前的类进行修改来实现,而是通过增加新的类来实现。DIP(依赖倒转原则,Dependence Inversion Principle):要针对...原创 2019-09-14 18:28:23 · 134 阅读 · 0 评论 -
设计模式——简单工厂模式
文章目录设计模式——简单工厂模式1.对工厂模式的理解假设一个很简单的场景:最简单的解决办法:1.1工厂模式2.简单工厂模式2.1 明确我们要生产的东西2.2 不同的手机有不同的品牌、设计图2.3 然后把设计图给工厂2.4 获取产品3.总结和问题总结问题设计模式——简单工厂模式1.对工厂模式的理解同样的一个理论原则,每个人的理解方式不一样,不过有简单法则,尽量让一切都保持简单,所以我尽量用一种...原创 2019-09-14 16:09:01 · 107 阅读 · 0 评论