![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程
nnzanna
。。
展开
-
线程---线程池
线程池什么是线程池?线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后执行,主要实现:创建线程和管理线程,并且给线程分配任务。线程池中的线程是并发执行的。线程池的组成部分:一个比较简单的线程池至少应包含线程池管理器、工作线程、任务列队、任务接口等部分。其中线程池管理器的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行任务的线...原创 2019-05-08 15:59:51 · 256 阅读 · 0 评论 -
线程--进程与线程
标题原创 2019-04-07 14:23:22 · 79 阅读 · 0 评论 -
线程---线程属性
线程属性 这里我们简单来谈一下,关于线程的属性:线程优先级,守护线程。线程优先级 每一个线程都有一个优先级。默认情况下,每个线程继承它父类线程的优先级,可以使用setPriority()方法来提高或者降低任何一个线程的优先级。可以将优先级设置为最小优先级默认优先级MIN_PRIORITY = 1,与最大优先级MAX_PRIORITY = 10之间的任何值,NORM_PRIORITY = 5。...原创 2019-04-24 20:47:28 · 193 阅读 · 0 评论 -
线程---线程的几种状态
标题原创 2019-04-18 22:47:57 · 119 阅读 · 0 评论 -
线程---Thread方法
Thread方法介绍Thread方法介绍:void start()启动一个新线程,start方法必须是子线程第一个调用的方法,新线程会调用Runnable接口的run方法,start方法不能重复调用void run()run方法是子线程的执行体,子线程从进入run方法开始直至run方法执行接收,意味着子线程的任务执行接收,在主线程直接调用run方法是不能创建子线程,只是普...原创 2019-04-18 22:39:41 · 146 阅读 · 0 评论 -
线程--线程创建的几种方法及比较
Java应用程序主程序 应用程序运行时,运行环境调用应用程序的入口点(main()方法)时,将创建应用程序主线程。public class ThreadDemo { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()+ " start")...原创 2019-04-07 12:11:17 · 163 阅读 · 0 评论 -
线程---线程间通信
线程间通信实现线程间通信的方式有三种:父线程–给子线程传递信息==== 》 构造函数传递;子线程–给父线程 ====》 FutureTask;线程间通信:Java.lang.Object包中: wait()\notify()\notifyAll();wait()\notify()\notifyAll()源码:/** * Wakes up ...原创 2019-04-24 22:07:46 · 131 阅读 · 0 评论 -
线程---锁(乐观锁、悲观锁)、CAS机制
标题原创 2019-04-25 00:08:43 · 129 阅读 · 0 评论 -
线程---volatile
volatile定义:轻量级的线程同步(sychronized)关键字;特点:1.内存可见性:对于线程共享变量,一个线程的修改,另一个线程可以直接获取到修改过的值。2.禁止指令的重排序(有序性);优势:如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。Java语言提供了volatile,在某些情况下...原创 2019-04-21 15:28:54 · 77 阅读 · 0 评论 -
线程---volatile的使用优化
著名的Java并发编程大师Doug lea在JDK 7的并发包java.util.concurrent里新增一个队列集合类LinkedTransferQueue,它在使用volatile变量时,用一种追加字节的方式来优化队列出队和入队的性能。LinkedTransferQueue的代码如下:/** 队列中的头部节点 */private transient final PaddedAtomi...原创 2019-04-21 16:18:00 · 132 阅读 · 0 评论 -
线程---happen-before原则
happen-before原则定义:Java内存模型具备一些先天的“有序性”,即不需要通过任何手段就能够得到保证的有序性,称为happens-before 原则。如果两个操作的执行次序无法从happens-before原则推导出来,那么它们就不能保证它们的有序性,虚拟机可以随意地对它们进行重排序。happen-before规则(先行发生原则):(1)程序次序规则:一个线程内,按照代...原创 2019-04-21 16:30:43 · 187 阅读 · 0 评论 -
线程---synchronized
标题原创 2019-04-24 21:25:13 · 98 阅读 · 0 评论 -
线程---生产者消费者模型-synchronized实现
模拟生产者、消费者一个生产者、一个消费者、仓库容量为1,模拟生产者、消费者通信过程。思路:仓库:ArrayList,初始化大小为1。生产者:当仓库未满的情况下,进行生产,并通知消费者消费;当仓库是满的时候,等待消费者消费后的通知。消费者:当仓库中不为空的情况下,进行消费,并通知生产者生产;当仓库为空时,等待生产者生产后的通知。实现:public class Producer...原创 2019-04-25 20:34:27 · 159 阅读 · 0 评论 -
线程---死锁
死锁定义:死锁是指两个或者两个以上的线程在线程执行过程中,由于竞争资源而造成的阻塞问题,若无外力作用下,他们将无法推进下去。此时处于死锁状态。死锁产生的原因:1、因竞争资源产生死锁;2、进程顺序推进不当发生死锁;出现死锁的必要条件:1、互斥条件:资源每次只能一个线程使用; ------》资源2、请求与保持条件:一个线程因请求资源而阻塞时,对已经获取的资源保持不放; --...原创 2019-04-27 23:30:43 · 159 阅读 · 0 评论 -
线程---死锁-哲学家进餐
哲学家进餐问题描述: 哲学家进餐问题描述有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,进餐完毕,放下筷子又继续思考。约束条件:(1)只有拿到两只筷子时,哲学家才能吃饭。(2)如果筷子已被别人拿走,则必须等别人吃完之后...原创 2019-05-09 12:02:49 · 492 阅读 · 0 评论 -
线程---ConcurrentHashMap
ConcurrentHashMap ConsurrntHashMap是线程安全且高效的HashMap。存在包:(1.7)java.util.concurrent包;继承关系:public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> implements ConcurrentMa...原创 2019-04-27 22:38:12 · 187 阅读 · 0 评论 -
线程---JDK1.8中ConcurrentHashMap对比1.7
1.8中ConcurentHashMap新增基本属性: /** * The bin count threshold for using a tree rather than list for a * bin. Bins are converted to trees when adding an element to a * bin with at least...原创 2019-04-27 22:46:15 · 167 阅读 · 0 评论 -
线程---ThreadPoolExecutor
ThreadPoolExecutor源码剖析:存在包:package java.util.concurrent;继承关系:public class ThreadPoolExecutor extends AbstractExecutorService 基本属性:重要属性列举:/* * The main pool control state, ctl, is ...原创 2019-05-08 15:58:37 · 172 阅读 · 0 评论 -
线程池---Executors类创建线程池
Executors静态工厂创建几种常用线程池Executors类:提供工厂方法用于创建线程池,返回的线程池都实现了ExecutorService接口;1.创建了一个固定线程数量的线程池,可以控制线程最大并发数,超出的线程会在队列中等待。它是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。但是在线程池空闲时,即线程池中没有可运行任务时,它也不会释放工作线...原创 2019-05-08 16:47:10 · 399 阅读 · 0 评论 -
线程---重入锁(ReentrantLock)
标题原创 2019-04-25 13:16:30 · 238 阅读 · 0 评论 -
线程---BlockingQueue
BlockingQueueBlockingQueue:ArrayBlockingQueue:有界阻塞队列LinkedBlockingQueue:无界阻塞队列SychronousQueue:同步阻塞队列ArrayBlockingQueue底层结构:数组 一把锁 /* * Concurren...原创 2019-05-03 17:16:47 · 111 阅读 · 0 评论 -
线程---多线程轮训打印数据
标题原创 2019-05-14 11:50:02 · 261 阅读 · 0 评论 -
线程---关于死锁,进程和线程,多进程与多线程,synchronized与ReentrantLock的区别
怎么理解系统的进程和线程??进程:进程是系统划分资源(I/O资源[磁盘,文件],CPU资源,内存资源)的基本单位,进程本身不执行任何的指令;每一个进程的创建,都伴随着一个主线程的创建,线程才是负责执行指令的,也就是说Linux系统调用的基本执行单元,就是线程(main线程 线程 = 线程栈(线程函数 main函数)),自己创建的线程,也是需要匹配一个线程的入口函数的,就是run函数;线程:...原创 2019-09-20 00:47:58 · 222 阅读 · 0 评论 -
并发几个概念理解
并发同步和异步同步:可以理解为发出一个请求后,必须等待返回结果才能执行下面的操作。**异步:请求发出后,不需要等待返回结果,可以继续执行后续操作,**异步请求更像是在另一个 “空间” 中处理请求的结果,这个过程不会影响请求方的其他操作。举个例子:比如我们去实体店买衣服,挑选完款式后下单让售货员去仓库拿货,在售货员拿货的过程你需要在店里等待,直到售货员把衣服交给你后才算购物成功...原创 2019-05-27 23:42:18 · 343 阅读 · 0 评论 -
线程---并发编程中的三个概念:原子性、有序性、可见性
原子性、有序性、可见性 在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。我们先看具体看一下这三个概念:1. 原子性原子性:即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。 ...原创 2019-04-21 16:04:01 · 139 阅读 · 0 评论