![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程篇
HCH996
一边失去,一边在寻找~
展开
-
线程的生命周期-线程控制
线程的五种状态新建(New) 就绪(Ready) 运行(Running) 阻塞(Blocked) 死亡(Dead)代码实例public class ThreadDemo2 { public static void main(String [] args){ Thread thread0 = new Thread(new ThreadTask()); Thread thread1 = new Thread(new ThreadTask());...原创 2020-10-26 17:11:51 · 138 阅读 · 0 评论 -
Java多线程
目录Java的线程模型线程的创建三种方式三种方式的比较Java的线程模型Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例 线程用于完成一定的任务(执行一段程序流), Java使用线程执行体来代表这段程序流 线程的使用过程:定义线程体》创建线程对象》调用线程对象的方法以启动线程创建线程对象只有一种方式,但定义线程执行体有多种方式线程的创建方式继承Thread类,重写run()方法 定义Thread类的子类,并重写该类的run()原创 2020-10-26 15:14:04 · 85 阅读 · 0 评论 -
线程和进程的概念
进程进程是处于运行过程中的程序,具有独立的功能,是系统进行资源分配和调度的独立单位独立性 进程是系统中独立存在的实体,它拥有自己独立的资源,每一个进程都拥有自己私有的地址空间,在没有经过进程本身允许的情况下,一个进程不能直接访问其他进程的地址空间;(音乐播放应用程序不能访问QQ浏览器的内存)动态性 进程是一个正在系统中活动的指令集合,包含了时间的概率,具有自己的生命周期和状态;并发性 在当个处理器上,多个进程可以并发地执行,并且在执行时它们彼此之间不会相互影...原创 2020-10-26 11:01:59 · 157 阅读 · 0 评论 -
ConcurrentHashMap线程安全机制以及源码分析
1. JDK8中基于HashEntry(首节点)进行线程安全同步保证(在首节点进行加锁)2.通过Node+CAS+Synchronized机制来完成 static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; volatile V val; volatile Node<K,V> ne..原创 2020-10-24 21:55:39 · 231 阅读 · 1 评论 -
高并发请求下使用ThreadLocal管理用户信息
目录保持客户端和服务端会话状态的方式:Cookie+SessionThreadLocal管理用户信息ThreadLocal在spring框架中的应用总结保持客户端和服务端会话状态的方式:Cookie+SessionHTTP协议是非连接性的,完成操作关闭浏览器后,链接就断开了。所以必须要有一种机制让保证会话的连续性,也就是Session机制 当开始一个会话时创建一传Session,并为其赋予一个独一无二的号码sessionID或者其他有用的信息如用户名等等,下一次访问的时候,传.原创 2020-10-24 19:31:33 · 1928 阅读 · 0 评论 -
ThreadLocal的底层原理
一、ThreadLocal原理ThreadLocal与线程同步机制不同,线程同步机制是多个线程共享同一个变量,对这个共享变量的修改,通过无锁或者有锁的机制保证线程的安全 而ThreadLocal是为每一个线程,创建一个只属于它自己的变量副本,线程可以改变自己所拥有的变量副本,而不会影响其他线程所对应的副本 简而言之,往ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的 一个线程使用自己的局部变量比使用全局变量方便且安全,因为局部变量只有线程自己能看见,不会影响其他线程.原创 2020-10-24 18:11:26 · 4037 阅读 · 0 评论 -
volatile域
目录一、volatile的可见性、有序性、原子性volatile保证可见性volatile保证有序性volatile不能保证原子性二、volatile变量的应用场景场景一:状态标志场景二:线程安全的双重检查单例模式应用场景三-volatile bean应用场景四-读-写锁策略(分段锁的具体实现方式)总结一、volatile的可见性、有序性、原子性volatile保证可见性某个共享变量如果被一个线程给修改了,其他线程能够立即知道这个修改操作 线程的..原创 2020-10-24 11:50:22 · 151 阅读 · 0 评论 -
线程池相关内容
线程池线程是重量级对象创建与销毁一个线程并不像创建一个对象那么简单,需要调用操作系统内核的 API,整个过程是一个偏重且耗时的操作 并发的线程数量很多,且执行时间很多的任务就结束,频繁的创建与销毁会大大降低系统效率 需要一种办法可以对线程进行重复利用,完成任务后并不被销毁,可以继续执行其他任务线程池的设计思路线程池是一种线程的使用模式,它为了降低线程使用过程中,频繁的创建和销毁所带来的资源消耗与代价 提前创建一定数量的线程,他们时刻准备着,在新任务到达后就开始执行;在完成任务后,再重新回原创 2020-10-23 18:39:11 · 100 阅读 · 0 评论 -
无锁机制CAS及其底层实现原理
1. 利用锁的同步机制class SafeCounter{ private int count; //同一时间只有一个线程可以进入add方法 public synchronized void add(){ //复合操作 this.count ++; }}public static void main(String[] args) { SafeCounter safeCounter = new SafeCou.原创 2020-10-23 12:38:28 · 800 阅读 · 2 评论 -
Synchronized和Lock锁
protected final boolean tryAcquire(int acquires) { final Thread current = Thread.currentThread(); //得到当前线程 int c = getState();//得到计数器的值 if (c == 0) {//如果为0,表示锁没有被任务线程持有 if (!hasQueuedPredecessors() &...原创 2020-10-23 12:23:45 · 182 阅读 · 0 评论 -
多线程的上下文切换-影响-如何优化
线程的上下文切换上下文切换1.对于CPU而言,在一个时刻只能运因自身原因被迫暂停运行,此时另一个线程会被操作系统选中来占用处理器行一个线程,当一个线程的时间片用完,或者2.当CPU结束运行一个线程,转去执行另外一个线程,这个过程就叫做线程上下文切换上下文1.在发生切换的时候,当前线程的任务可能并没有执行完毕。所以在切换时需要保存线程切换前的运行状态,以便下一次,可以接着切换之前的状态继续执行后续的任务2.切出切入的过程中,操作系统需要保存和恢复相应的进度信息,这个进度信息就是上下文原创 2020-10-23 10:44:57 · 1236 阅读 · 0 评论