一.线程生命周期 线程被创建启动以后,他既不是一启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)五种状态 1.新建状态 当程序使用new关键字创建了一个线程后,该线程就处于新建状态 2.就绪状态 当线程对象调用了start()方法之后,该线程就处于就绪状态,java虚拟机会为其创建方法调用栈和程序计数器. 这个状态中的线程并没有开始执行线程,只是表示该线程可以运行了,…
内容提要: 线程与进程 为什么要使用多线程/进程?线程与进程的区别?线程对比进程的优势?Java中有多进程吗? 线程的创建与启动 线程的创建有哪几种方式?它们之间有什么区别? 线程的生命周期与线程控制 线程的生命周期有哪几种状态?各种状态之间如何转换?线程的等待.退让.中断等 1.线程与进程 使用多进程和多线程可以实现多个任务的并发执行,方便将IO操作或者耗时操作在后台处理,避免长时间等待,对于多核处理器能充分利用CPU资源,提高CPU使用率. 进程是系统进行调度和资源分配的独立单位. 线程是进…
Java并发编程基础 1. 并发 1.1. 什么是并发? 并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力.如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可交互性将大大改善.现代的PC都有多个CPU或一个CPU中有多个核.是否能合理运用多核的能力将成为一个大规模应用程序的关键. 1.2. 进程 vs. 线程 进程是以独立于其他进程的方式运行的,进程间是互相隔离的.一个进程无法直接访问另一个进程的数据.进程的资源诸如内存和CPU时间片都是由操作系统来分配.…
Java并发编程基础 并发 在计算机科学中,并发是指将一个程序,算法划分为若干个逻辑组成部分,这些部分可以以任何顺序进行执行,但与最终顺序执行的结果一致.并发可以在多核操作系统上显著的提高程序运行速度. 并发与并行联系与区别 这里参考ErLang之父的解释,ErLang之父谈到了如何向一个5岁小孩解释并发与并行. []( 直观来讲,并发是两个等待队列中的人同时去竞争一台咖啡机,两队列中的排队者也可能约定交替使用咖啡机,也可能是大家同时竞争咖啡机,谁先竞争到咖啡机谁使用,不过后一种的方法可能引发冲…
Java_并发编程培训 java并发程序设计教程 JUC Exchanger 一.概述 Exchanger 可以在对中对元素进行配对和交换的线程的同步点.每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象.Exchanger 可能被视为 SynchronousQueue的双向形式.Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用. 二.算法描述 基本想法是维护一个槽指向一个结点,结点包含一个准备提供(出去)的item和一…
Java并发编程--基础进阶高级完整笔记. 这都不知道是第几次刷狂神的JUC并发编程了,从第一次的迷茫到现在比较清晰,算是个大进步了,之前JUC笔记不见了,重新做一套笔记. 参考链接:https://www.bilibili.com/video/BV1B7411L7tE 目录 1.多线程--基础内容 1.Thread状态 2.Synchronized 3.Lock锁 4.总结 2.八锁现象(synchronized.static) 1.synchronized 2.static synchron…
Java并发编程(您不知道的线程池操作) 这几篇博客,一直在谈线程,设想一下这个场景,如果并发的线程很多,然而每个线程如果执行的时间很多的话,这样的话,就会大量的降低系统的效率.这时候就可以采用线程池的操作,来缓存我们并发操作的线程. 而对于java中的线程池,大家需要理解好ThreadPoolExecutor.AbstractExecutorService.ExecutorService和Executor这几个类之间的关系即可. 通过看上面的这个关系图,可以知道,最核心的一个类是ThreadP…
[Java并发编程]之二:线程中断 使用interrupt()中断线程 ​ 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回.这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行. ​ 下面一段代码演示了休眠线程的中断: public class SleepInterrupt extends Object implements Runna…
java并发编程笔记(七)--线程池 new Thread弊端 每次new Thread新建对象,性能差 线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者OOM 缺少更多功能,如更多执行.定期执行.线程中断 线程池的好处 重用存在的线程,减少对象创建.消亡的开销,性能佳 可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞 提供定时执行.定期执行.单线程.并发数控制等功能 ThreadPoolExecutor 重要核心参数 core…
java并发编程笔记(五)--线程安全策略 不可变得对象 不可变对象需要满足的条件 对象创建以后其状态就不能修改 对象所有的域都是final类型 对象是正确创建的(在对象创建期间,this引用没有逸出) final关键字:类.方法.变量 修饰类:不能被继承 修饰方法:1.锁定方法不被继承类修改:2.效率,目前近期版本已经将私有方法默认设置为final,final能够使方法转为内嵌调用. 修饰变量:基本数据类型变量.引用类型变量 定义不可变对象的其他方法: Collections.unmodifi…