Java Thread ThreadPool
文章平均质量分 71
Java 多线程和高并发只是点总结
Java 线程池知识点总结
EngineerForSoul
我醉欲眠卿且去,明朝有意抱琴来
书山有路勤为径,学海无涯苦作舟
同是天涯沦落人,相逢何必曾相识
展开
-
18 Java并发机制的底层实现原理_volatile实现原理
volatile关键字volatile的两条实现原则(Lock前缀的作用)Lock前缀指令会引起处理器缓存回写到内存。一个处理器的缓存回写到内存会导致其他处理器的缓存无效。volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。volatile不会引起线程上下文的切换和调度,故而volatile的执行成本比synchronized低。原创 2023-08-10 16:30:34 · 344 阅读 · 0 评论 -
17 synchronized关键字使用 synchronized方法、synchronized块
同进程的多线程共享同一块存储空间,当多个线程同时访问某块内存空间时,就存在并发问题。为了保证数据在方法中被访问时的正确性,在访问时加入锁机制synchronized;当线程获得对象的排它锁,该线程独占资源,其他线程必须等待其使用后释放锁即可。synchronized方法控制对象的访问,每个对象对应一把锁,每个synchronized方法都必须获得该方法对象的锁才能执行,否则会阻塞线程,方法执行时独占该锁,知道方法执行完毕才会释放锁。synchronized修饰的代码块,会在object对象上加一个监视器。原创 2023-08-09 22:56:34 · 648 阅读 · 0 评论 -
16 ScheduledThreadPoolExecutor定时任务详解,schedule,scheduleWithFixedDelay,scheduleAtFixedRate避坑指南
ScheduledThreadPoolExecutor的功能与Timer类似,但 ScheduledThreadPoolExecutor功能更强大、更灵活。Timer对应的是单个后台线程,而ScheduledThreadPoolExecutor可以在构造函数中指定多个对应的后台线程数。ScheduledThreadPoolExecutor主要用来在给定的延迟之后运行任务,或者定期执行任务。ScheduledThreadPoolExecutor还提供了非常灵活的API,用于执行任务。原创 2023-08-08 22:31:50 · 661 阅读 · 0 评论 -
15 Executor框架,ThreadPoolExecutor、FixedThreadPool,SingleThreadExecutor,CachedThreadPool,Executors工具类
Executor框架、ExecutorService、ExecutorsFixedThreadPool 可重用固定线程数的线程池SingleThreadExecutor 单线程线程池CachedThreadPool 可调整线程数的线程池Executor框架的执行流程Executor框架的成员 ThreadPoolExecutor、ScheduledThreadPoolExecutor、 Future接口、Runnable接口、Callable接口和Executors原创 2023-08-08 15:05:48 · 98 阅读 · 0 评论 -
14 Java线程池ThreadPoolExecutor详解,线程池的实现原理,创建线程池,提交任务execute和submit,关闭线程池,根据任务特性合理地配置线程池,线程池的监控
`Java中的线程池 ThreadPoolExecutor ☆☆☆`线程池的实现原理线程池的创建 ThreadPoolExecutor向线程池提交任务的方法execute()、submit()关闭线程池 shutdown或shutdownNow方法来关闭线程池通过任务特性合理地配置线程池任务的性质:CPU密集型任务、IO密集型任务和混合型任务。任务的优先级:高、中和低。任务的执行时间:长、中和短。任务的依赖性:是否依赖其他系统资源,如数据库连接。建议使用有界队列线程池的监控原创 2023-08-08 11:02:50 · 127 阅读 · 0 评论 -
13 Java 多线程见的通信 volatile synchronized,Java多线程等待通知机制, ThreadLocal的使用
Java支持多个线程同时访问一个对象或者对象的成员变量,由于每个线程可以拥有这个变量的拷贝(虽然对象以及成员变量分配的内存是在共享内存中的,但是每个执行的线程还是可以拥有一份拷贝,这样做的目的是加速程序的执行,这是现代多核处理器的一个显著特性),所以程序在执行过程中,一个线程看到的变量并不一定是最新的。一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个过程开始于一个线程,而最终执行又是另一个线程。关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它。原创 2023-08-08 10:50:19 · 134 阅读 · 0 评论 -
12 线程休眠 sleep,线程礼让 yield, Thread.join()的使用,线程过期的suspend()、resume()和stop()
每个线程终止的前提是前驱线程的终止,每个线程等待前驱线程 终止后,才从join()方法返回。一个线程A执行了B.join()时,当前线程A等待B线程终止之后才执行线程A剩下部分。yield() 暂停当前线程,使当前线程从running状态变为Ready状态,join方法相当于插队执行,最早插队的是main,依次为0-9,故执行顺序如上。a.join()方法,等待a线程执行完毕,再执行其他线程,其他线程阻塞。join()保证线程B的可见性,即线程B中修改的变量,线程A可见。多执行几次,会发现不一样的结果。原创 2023-08-07 23:38:08 · 200 阅读 · 0 评论 -
11 线程的中断 interrupt(),InterruptedException 安全的终止线程,线程优雅停止
通过标识位或者中断操作的方式能够使线程在终止时有机会去清理资源,而不是武断地 将线程停止,因此这种终止线程的做法显得更加安全和优雅。如果该线程已经处于终结状态,即使该线程被中断过,在调用该线程对象的isInterrupted()时依旧会返回false。中断状态是线程的一个标识位,而中断操作是一种简便的线程间交互方式,而这种交互方式最适合用来取消或停止任务。线程通过检查自身是否被中断来进行响应,线程通过方法isInterrupted()来进行判断是否被中断,原创 2023-08-07 23:32:03 · 148 阅读 · 0 评论 -
10 守护线程,线程优先级
优先级高的线程分配时间片的数量要多于优先级低的线程。 睡眠,当前线程睡眠一段时间,暂时将cpu让给其他线程执行,睡眠时间到了,就开始竞争cpu。通过调用Thread.setDaemon(true)将线程设置为Daemon线程。守护线程随Java虚拟机退出而退出。即main线程执行完毕后,守护线程立即终止。Daemon线程是一种支持型线程,它主要被用作程序中后台调度以及支持性工作。Java虚拟机中不存在非Daemon线程的时候,Java虚拟机将会退出。 当前线程正则执行的时候停下来进入等待队列。原创 2023-08-07 23:22:16 · 166 阅读 · 0 评论 -
09 Java多线程的状态详解 NEW, RUNNABLE, BLOCKED, WAITING, TIME_WAITING, TERMINATED,jstack查看dump文件中线程的状态
Java多线程的状态详解 NEW, RUNNABLE, BLOCKED, WAITING, TIME_WAITING, TERMINATED,jstack查看dump文件中线程的状态原创 2023-08-07 23:15:36 · 156 阅读 · 0 评论 -
08 启动线程;为什么说Java中只有Thread代表线程;静态代理 Thread类; 使用Lambda表达式更快捷编写线程
启动线程;为什么说Java中只有Thread代表线程;静态代理 Thread类; 使用Lambda表达式更快捷编写线程原创 2023-08-07 23:06:29 · 81 阅读 · 0 评论 -
07 Java创建线程的方式;继承 extends java.lang.Thread类;实现Runnable接口;实现callable接口;创建多线程三种方式的优缺点
获取返回值一般需要使用 FutureTask.isDone()方法来判断线程是否执行完。执行上述代码:主线程和Thread线程交替输出,说明CPU随机调度执行线程。每个线程都有获取CPU的机会。推荐使用该方法创建线程:避免单继承的局限性,方便同一个对线被多个线程使用。Java单继承特性,如果已经继承其他类,则不能再继承Thread类。实现callable接口,需要返回值类型。重写call()方法,需要抛出异常。get() 获取返回值。调用Start()方法。调用Start()方法。原创 2023-08-07 22:47:39 · 137 阅读 · 0 评论 -
05 并发编程挑战,上下文切换问题,死锁问题,受限于硬件和软件的资源问题
并发编程上下文切换如何减少上下文切换减少上下文切换实战死锁资源限制的挑战什么是资源限制资源限制引发的问题如何解决资源限制的问题在资源限制情况下进行并发编程原创 2023-08-07 22:55:18 · 317 阅读 · 0 评论 -
04 Java多线程及并发 JMM java的内存模型
JMM java的内存模型JMM物理硬件和内存java内存模型工作内存与主内存交互volatile修饰的变量的特殊规则long和double变量的特殊规则并发内存模型的实质原子性(Automicity)可见性有序性先行发生原则什么是先行发生原则Java内存模型自带先行发生原则有哪些JMMjava内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的转载 2020-11-10 22:04:12 · 151 阅读 · 0 评论 -
03 Java多线程及并发 为什么说线程是不安全的,怎么排查死锁问题
Java多线程及并发线程是不安全线程的安全问题(竞争条件)原子性 (Atomicity)逻辑上没问题的代码,在多线程的环境下却暗藏杀机如何处理线程的安全问题不可变对象加各种锁并发工具包听天由命式编程死锁简单的死锁 示例排查解决避免原则线程是不安全一段代码如果在多线程情况下,执行的结果和预期的不符合,就是线程不安全。为什么说线程是不安全的?话不多说直接上代码。只有一个main线程时:public class ThreadUnSafe { private static int globalI原创 2020-11-10 21:12:36 · 332 阅读 · 0 评论 -
02 Java多线程及并发 runable、callable;理解interrupt中断;jvm信息如何查看;线程可以被中断吗?
Java多线程及并发1、Runable、Callable2、Thread中断Thread.interrupt 中断其它线程的示例1、任何线程都可以被中断吗?2、中断只能发生在如下方法中吗?3、如果没有能力处理中断,请重新设置中断标志位,使其它调用者知道该线程被中断了。3、如何让线程一直等待4、如何看JVM中的信息1、Runable、Callable只有Thread代表线程,Runable仅代表一个任务,可以被任何线程执行的任务。Runable不能有返回值,不能抛出checked exception。原创 2020-11-09 18:29:51 · 536 阅读 · 0 评论 -
01 Java多线程及并发 为什么需要多线程;多线程的本质问题;ThreadLocal
Java多线程及并发1:为什么需要多线程优点缺点1、慢,切换上下文典型值1us vs 0.3ns/cycle能不能让上下文切换尽可能少? 可以协程2、占用资源:每个线程有独立的方法栈。2:Thread是什么?3、多线程反直觉示例示例1示例2:示例3:示例4:异常处理4、Thread 的底层模型5、Thread的生命周期6、ThreadLoacl模拟一个ThreadLocalThreadLocal:线程局部私有的变量7、协程的优缺点1:为什么需要多线程CPU、内存、IO的巨大性能差异多核心CPU的发展原创 2020-11-09 16:28:56 · 256 阅读 · 0 评论 -
SleepUtils工具类 方便直接调用Java线程sleep方法不需要捕获异常
SleepUtils工具类 方便直接调用Java线程sleep方法。原创 2023-08-07 22:41:48 · 282 阅读 · 0 评论 -
线程的5种状态(新建、就绪、运行、阻塞、死亡)
1.新建(NEW):新创建了一个线程对象。2.可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3.运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。4.阻塞(BLOCKED):阻...转载 2019-05-22 15:46:26 · 5880 阅读 · 0 评论 -
Java多线程实现
java实现多线程继承 extends java.lang.Thread或其子类创建多线程 继承Thread重写Run()方法使用线程 创建Thread的子类对象调用子类对象的start()方法缺点:Java单继承特性,如果已经继承其他类,则不能再继承Thread类。/** * 创建多线程:继承Thread 重写run() */public class ThreadT...原创 2019-05-22 14:26:15 · 182 阅读 · 0 评论 -
06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别
不是说多线程是可以提高效率,怎么又说多线程慢呢。这里慢单纯指的是线程之间切换时消耗的时间和CPU的时钟周期相比慢。针对内存寻址、硬盘寻址是有提升的。CPU在执行A任务(A没有执行完)时,切换到任务B,需要保存A的上下文内容,等待CPU切换到执行A任务使用。:是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位。可以看成是进程内的多条执行路径。软件的目的:提高人们的工作效率,简化工作流程。:进程是计算机中的程序关于某数据集合上的一次运行活动,,是操作系统结构的基础。原创 2023-08-07 22:51:12 · 1314 阅读 · 0 评论 -
程序 进程 线程概念、特点、区别
线程概念程序 进程 线程程序 进程 线程程序(Program):程序的为了让计算机执行某些操作或解决某个问题而编写一系列有序的指令集合。软件的目的:提高人们的工作效率,简化工作流程。动态概念。进程(Process):进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 动态概念。进程的特点:结构性:由程序块CODE、数据...原创 2019-05-22 14:12:52 · 2016 阅读 · 0 评论 -
线程安全及不可变性
线程安全及不可变性当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件。多个线程同时读同一个资源不会产生竞态条件。我们可以通过创建不可变的共享对象来保证对象在线程间共享时不会被修改,从而实现线程安全。如下示例:public class ImmutableValue{ private int value = 0; public Immutab转载 2017-10-24 22:54:37 · 196 阅读 · 0 评论 -
线程安全与共享资源
线程安全与共享资源允许被多个线程同时执行的代码称作线程安全的代码。线程安全的代码不包含竞态条件。当多个线程同时更新共享资源时会引发竞态条件。因此,了解Java线程执行时共享了什么资源很重要。局部变量局部变量存储在线程自己的栈中。也就是说,局部变量永远也不会被多个线程共享。所以,基础类型的局部变量是线程安全的。下面是基础类型的局部变量的一个例子:public void someMethod(){转载 2017-10-24 22:53:10 · 212 阅读 · 0 评论 -
多线程 竞态条件与临界区
竞态条件与临界区在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的资源就是安全的。多线程同时执行下面的代码可能会出错:public class Counter { pro转载 2017-10-24 22:51:34 · 381 阅读 · 0 评论 -
Java并发性和多线程介绍、优缺点
在过去单核CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。随着多任务对软件开发者带来的新挑战,程序不在能假设独占所有的CPU时间、所有的内存和其他计算机资源。一个原创 2017-10-22 17:36:17 · 5822 阅读 · 0 评论