多线程
文章平均质量分 94
Lvshen的技术小屋
技术宅
展开
-
【知识科普】比多线程还快?了解下什么是协程
什么是线程线程是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在一些系统中,线程也被称之为轻量进程。而轻量进程一般指的内核线程。一个进程可以有很多线程来处理,每条线程并行执行不同的任务。如果进程要完成的任务很多,这样需很多线程,也要调用很多核心。因此在多核的CPU上面使用多线程程序设计能更有效的利用CPU。多线程示例:@Testpu...原创 2021-03-12 16:56:03 · 947 阅读 · 0 评论 -
线程的几种状态你真的了解么
线程状态介绍这里我们讲的是Java中的线程状态。线程状态如下:“ 线程初始状态:NEW 线程运行状态:RUNNABLE 线程阻塞状态:BLOCKED 线程等待状态:WAITING 超时等待状态:TIMED_WAITING 线程终止状态:TERMINATED ”其中等待状态应该是一个比较复杂且重要的状态。线程进入等待状态,即线程因为某种原因放弃了CPU使用权,阻塞也分为几种情况: 等待阻塞:运行的线程执行wait方法,JVM原创 2020-09-10 08:24:00 · 189 阅读 · 0 评论 -
Java并发编程思维导图-究极版
思维导图见文末~Java内存模型(JMM)线程通信机制内存共享Java采用消息传递内存模型重排序重排序在多线程环境下可能会导致数据不安全在单线程环境下不能改变程序运行的结果存在数据依赖关系的不允许重排序为了程序的性能,处理器、编译器都会对程序进行重排序处理条件问题顺序一致性一个线程中的所有操作必须按照程序的顺序来执行所有线程都只能看到一个单一的操作执行顺序,不管程序是否同步每个操作都必须原子执行且立刻对所有线程可见多线程环境下的理论参考模型为程...原创 2020-09-09 21:08:05 · 334 阅读 · 0 评论 -
手写线程池
线程成本首先我们需要了解线程是不是越多越好?1、线程在Java中是一个对象,每一个Java线程都需要一个操作系统线程支持。线程创建、销毁需要时间。如果创建时间+销毁时间>执行任务时间就很不合算。2、Java对象占用堆内存,操作系统线程占用系统内存,根据JVM规范,一个线程默认最大栈大小1M,这个栈空间是需要从系统内存中分配的。线程过多,会消耗很多的内存。从上面我们知道,线程创建,销毁需要时间,线程创建需要占用系统内存。线程的存在是有成本的,这就要看这个成本会不会影响系统性能了。原创 2020-09-06 22:38:51 · 119 阅读 · 0 评论 -
Java锁-synchronized底层原理
Java中的锁可以分为隐式锁和显示锁,Lock接口的锁都是显示锁。JVM内置锁就是隐式锁,synchronized就是隐式的锁。显示锁:需要手动释放锁,可以设置是否为公平锁隐式锁:不需要手动释放锁,非公平锁MonitorLock接口实现的锁底层是通过AQS同步队列实现的。用到了unsafe.park()方法。synchronized 底层有一个monitor监视器,会监控持有锁的对象。如下图: monitorenter表示当前程序将进入同步块mon...原创 2020-09-05 08:37:06 · 323 阅读 · 0 评论 -
实现多线程间通信的FutureTask,我们来手写一个
Callable实现线程通信我们先来温习下如何让创建多线程:“1.继承Thread2.实现Runnable3.调用Callable4.使用线程池ThreadPoolExecutor”我们在平时的开发中肯定遇到过【B线程如何获取A线程中的数据】,经验老道的程序员首先会想到使用Callable实现。直接看代码:如上图,线程A【Thread-0】里面存入了字符串【Lvshen的技术小屋】。我们要在主线程【main】获取这个值,就采用如上方法。测试结果如下:10:51:12原创 2020-09-04 08:21:59 · 257 阅读 · 0 评论