随笔分类 -  Java 多线程

摘要:ThreadLocal简介 ThreadLocal是为了在多线程下,实现对于一个变量访问的安全性。不同于加锁的可见性方式,ThreadLocal提供给每个线程有一个自己的变量,和其他线程互不干扰,所以,变量也是不共享的,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程不安全问题。 阅读全文
posted @ 2020-12-29 10:52 lippon 阅读(109) 评论(0) 推荐(0)
摘要:ConcurrentHashMap 为什么需要ConcurrentHashMap HashMap线程不安全,因为HashMap的Entry是以链表的形式存储的,如果多线程操作可能会形成环,那样就会死循环。HashTable效率低,利synchronized保证线程安全,同时只有一个线程访问其同步方法 阅读全文
posted @ 2020-11-15 11:13 lippon 阅读(114) 评论(0) 推荐(0)
摘要:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 leetcode 解题思路:如何不用上面的条件判断语句,还是能判断传入参数的大小呢?这里就可以利用逻辑与和或的运算规则。 逻辑与 && 当运算符前面的条件为假, 阅读全文
posted @ 2020-11-14 20:22 lippon 阅读(79) 评论(0) 推荐(0)
摘要:Executor框架简介 从JDK5开始,把工作单元和执行机制分离开来了,工作的单元包括Runnable和Callable,执行机制就是由Executor框架提供。 Executor两级调度模型 HotSpot虚拟机将Java线程映射为操作系统的线程。 在上层,Java多线程程序将应用分解为多个任务 阅读全文
posted @ 2020-11-14 11:21 lippon 阅读(67) 评论(0) 推荐(0)
摘要:线程池的作用 降低资源消耗。重复利用已有线程,减少线程的创建和销毁造成的消耗。提高响应速度。当有任务需要处理的时候,就不用再花费重新创建线程的时间了。提高线程的可管理性。不合理利用线程,会浪费资源,影响系统稳定,线程池可以对线程进行统一分配、调优和监控。 线程池的实现原理 线程池由两种觉得组成:多个 阅读全文
posted @ 2020-11-14 10:12 lippon 阅读(85) 评论(0) 推荐(0)
摘要:闭锁:CountDownLatch 使用场景 当前线程需要等待若干条线程执行完毕后,才能继续执行的情况。 也可以是若干个步骤执行完毕后的情况。 使用方法 初始化闭锁的时候,填入计数值,然后等待其他线程或者步骤对计数值进行操作减减。当计数值变为0的时候,线程就会从闭锁的await()方法处继续执行。 阅读全文
posted @ 2020-11-13 10:58 lippon 阅读(105) 评论(0) 推荐(0)
摘要:锁的作用 控制多个线程访问共享资源。线程协作 Lock接口 特点 与synchronized类似的同步功能,只是需要显式地获取和释放锁。缺少隐式获取锁的便捷性。拥有锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种同步特性。可扩展性好。尝试非阻塞地获取锁:如果当前时刻锁没有被占用,则获得锁。 阅读全文
posted @ 2020-11-13 10:24 lippon 阅读(74) 评论(0) 推荐(0)
摘要:为什么需要线程间通信 让线程之间合作,提高运行效率。 volatile和synchronized关键字 实现原理 这两个方式都是采用共享内存的方式进行通信,通过同步机制保证数据可见性和排他性。 特点 本质是数据共享。不能特定地传给某个线程数据,需要程序员自己编写逻辑。数据在各个线程的更新顺序由操作系 阅读全文
posted @ 2020-11-13 08:49 lippon 阅读(84) 评论(0) 推荐(0)
摘要:什么是中断 Java的一种机制,用于一个线程去暂停另一个线程的运行。就是一个正在运行的线程被其他线程给打断,停止运行挂起了。 我觉得,在Java中,这种中断机制只是一种方便程序员编写进程间的通信罢了。 如何中断 interrupt() 其他线程调用这一线程的这一方法来对其进程中断。isInterru 阅读全文
posted @ 2020-11-12 10:03 lippon 阅读(131) 评论(0) 推荐(0)
摘要:线程 什么是线程 操作系统调度的最小单元就是线程,也叫轻量级进程。 为什么要使用多线程 多线程程序能够更有效率地利用多处理器核心。用户响应时间更快。方便程序员将程序模型映射到Java提供的多线程编程模型上。 线程的状态 1. 初始态 NEW 线程被构建,但是还没有调用start()方法调用。 2 运 阅读全文
posted @ 2020-11-12 09:25 lippon 阅读(77) 评论(0) 推荐(0)
摘要:什么是JMM JMM就是Java内存模型。目的是为了屏蔽系统和硬件的差异,让同一代码在不同平台下能够达到相同的访问结果。规定了线程和内存之间的关系。 内存划分 JMM规定了内存主要划分为主内存和工作内存。 如果Java线程都去操作主内存,对性能的影响就很大,如果每个线程都具有自己的工作内存,然后再将 阅读全文
posted @ 2020-11-11 10:08 lippon 阅读(114) 评论(0) 推荐(0)
摘要:什么是synchronized synchronized可以保证某个代码块或者方法被一个线程占有,保证了一个线程的可先性。java 1.6之前是重量级锁,在1.6进行了各种优化,就不那么重了,并引入了偏向锁和轻量级锁,以及锁的存储结构和升级过程。 synchronized实现方式 Java中每个对象 阅读全文
posted @ 2020-11-10 10:22 lippon 阅读(83) 评论(0) 推荐(0)
摘要:什么是volatile Java语言允许线程访问共享变量,为了确保共享变量能够被准确一致地更新,如果一个字段被声明为volatile,那么Java内存模型将会确保所有线程看到这个变量时值是一致的。保证了多处理器开发中,共享变量的可见性。 volatile的使用 public volatile int 阅读全文
posted @ 2020-11-09 14:13 lippon 阅读(119) 评论(0) 推荐(0)
摘要:并发编程是为了使程序运行得更快,但是,不是启动更多得线程就能最大限度地执行并发,也不是线程更多就能使得程序运行得更快,而且并发编程更容易产生错误,如果要高效且正确地执行并发,就需要注意这三种问题 上下文切换死锁资源限制 上下文切换 线程运行机制 一个CPU同时只能运行一个线程;操作系统给每条分配时间 阅读全文
posted @ 2020-11-09 09:33 lippon 阅读(81) 评论(0) 推荐(0)