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