java多线程
文章平均质量分 52
维护世界和平有我
这个作者很懒,什么都没留下…
展开
-
ThreadGroup(线程组)
ThreadGroup(线程组)线程组 主要用 对一批线程进行管理,如中断(interrupt)/暂停(suspend)/恢复(resume)/终止(stop)等操作;线程组 中 也可以有其它线程组;默认情况下, 新的线程都会被加入到main线程所在的 线程组; public static void main(String[] args) throws InterruptedException { ThreadGroup threadGroupA = new ThreadGr原创 2021-03-25 11:12:43 · 879 阅读 · 0 评论 -
Java线程的6种状态、NEW、RUNNABLE、BLOCK、TIMED_WAITING、TERMINATED
测试Java线程的6种状态NEW、RUNNABLE、BLOCK状态 public static void main(String[] args) throws InterruptedException { Object o = new Object(); Runnable runnable = ()->{ synchronized (o){ while (true){原创 2021-03-25 11:09:12 · 917 阅读 · 0 评论 -
偏向锁、轻量级锁、重量级锁、锁升级、锁对比
文章目录JVM中的锁Java对象头Mark Word1. 偏向锁定义偏向锁的获取过程偏向锁的撤销开启偏向锁2. 轻量级锁轻量级锁解锁3. 重量级锁锁对比锁升级无锁 → 偏向锁偏向锁 -> 轻量级锁线程上下文切不会引起系统调用,但是开销也很大;JVM中的锁锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态;Java对象头Mark Word这里重点关注对象头中的Mark Word。MarkWord里默认数据是存储对象的HashCode等信息,但是在运行原创 2021-03-25 11:00:46 · 927 阅读 · 0 评论 -
violate、内存屏障
文章目录@[toc]1. Volatile关键字的内存语义可见性原子性禁止指令重排序2. 内存屏障什么是内存屏障volatile语义中的内存屏障内存屏障的作用1. Volatile关键字的内存语义可见性对volatile变量的写操作会把该线程的本地内存中的共享变量值刷新到主内存对volatile变量的读操作会把本地内存置为无效,并从主内存中读取共享变量原子性读、写操作具有原子性,但volatile++这种复合操作不具有原子性;禁止指令重排序volatile还能禁止禁止指令重排序;原创 2021-03-24 18:52:03 · 918 阅读 · 0 评论 -
synchronized的实现原理用法详解
文章目录synchronized的实现原理以及使用方式应用方式1. 修饰==代码块==2. 修饰==实例方法(普通方法)==3. 修饰==静态方法==4. 同步一个类synchronized的实现原理注意事项synchronized的实现原理以及使用方式应用方式synchronized关键字最主要有以下4种应用方式:Java中的每一个对象都可以作为锁。具体表现 为以下3种形式。对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的Class对象。对于同步方法块,锁是Synch原创 2020-10-29 13:37:43 · 665 阅读 · 0 评论 -
java Monitor对象监视器、对象头、mark word
文章目录Monitor监视器java对象头MonitorMonitor监视器每一个对象都有一个monitor与之关联,当且一个monitor被持有后,它将处于锁定状态。线程执行到monitorenter 指令时,将会尝试获取对象所对应的monitor的所有权,即尝试获得对象的锁。java对象头这里重点关注对象头中的Mark Word。MarkWord里默认数据是存储对象的HashCode等信息,但是在运行期间,Mark Word里存储的数据会随着锁标志位的变化而变化。重量级锁也就是通常说原创 2020-10-29 13:36:04 · 4333 阅读 · 4 评论 -
如何安全地终止线程interrupt()、isInterrupted()、interrupted()的区别与使用
文章目录二、如何安全地终止线程interrupt()、isInterrupted()、interrupted()的区别与使用interrupt()isInterrupted()interrupt==ed==()注意使用interrupt()方法终止线程外部干涉二、如何安全地终止线程有2种方法可以安全地终止线程:使用interrupt()外部干涉(推荐)。interrupt()、isInterrupted()、interrupted()的区别与使用interrupt()注意区分inter原创 2020-10-29 13:27:10 · 791 阅读 · 0 评论 -
开启线程的几种方式、实现 Runnable 接口、实现 Runnable 接口、继承 Thread 类、FutureTask 配合 Thread
https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%B9%B6%E5%8F%91.md#%E4%B8%89%E4%B8%AD%E6%96%AD一个线程执行完毕之后会自动结束,如果在运行过程中发生异常也会提前结束。如何安全地终止线程有2种方法可以安全地终止线程:使用interrupt()利用一个boolean变量来控制是否需要停止任务并终止该线程(推荐)。interrupt()、isInterrupted()、i.原创 2020-10-13 21:43:21 · 758 阅读 · 0 评论 -
ThreadLocal原理、ThreadLocal内存泄漏
文章目录ThreadLocalThreadLocal原理ThreadLocal内存泄漏ThreadLocalhttps://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%B9%B6%E5%8F%91.md#2-%E7%BA%BF%E7%A8%8B%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8thread-local-storageThreadLocal,即线程变量常用的3个方法:set()、get()、原创 2020-10-29 13:20:23 · 798 阅读 · 0 评论 -
java虚假唤醒
虚假唤醒https://blog.csdn.net/qq_39455116/article/details/87101633当一个条件满足时,很多线程都被唤醒了,但是只有其中部分是有用的唤醒,其它的唤醒都是无用的唤醒;比如说买货,如果商品本来没有货物,突然进了一件商品,这是所有的线程都被唤醒了,但是只能一个人买,所以其他人都是假唤醒,获取不到对象的锁。解决方法:防止虚假唤醒,wait()应该放在循环中,当线程被唤醒时再进行一次条件判断,直到满足条件才进行下一步。synchronized (原创 2020-10-29 13:16:30 · 624 阅读 · 0 评论 -
wait()、notify()、notifyAll()原理用法详解sleep()与wait()区别
文章目录wait()wait()原理monitorsleep()与wait()区别wait()、notify()、notifyAll()都是Object的方法;https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%B9%B6%E5%8F%91.md#wait-notify-notifyallwait()调用 wait() 使得线程等待某个条件满足,线程在等待时会被挂起,当其他线程的运行使得这个条件满足时,其它线程会调用原创 2020-10-29 13:13:43 · 758 阅读 · 0 评论 -
java多线程Thread.sleep方法用法详解
sleep()Thread.sleep(long millis)Thread.sleep(long millis, int nanos)Thread.sleep(long millis)指定线程阻塞的毫秒数;时间到达后,线程进入就绪状态;注意:sleep方法不会释放锁;底层是native方法 public static native void sleep(long millis) throws InterruptedException;使用 try {原创 2020-10-29 13:06:29 · 1605 阅读 · 0 评论 -
java多线程join()方法原理详解
join()在线程中调用另一个线程的join()方法,会将当前线程挂起,而不是忙等待,直到目标线程结束。join()方法的源码public final synchronized void join(long millis)throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new Ill原创 2020-10-29 13:02:32 · 1196 阅读 · 0 评论 -
java Thread.yield()用法详解
文章目录@[toc]yield()join()sleep()wait()、notify()、notifyAll()wait()wait()原理monitorsleep()与wait()区别notify()notifyAll()使用案例yield()yieldv.出产(作物);产生(收益、效益等);提供;屈服;让步;放弃;缴出n.产量;产出;利润Thread.yield()让当前处于运行状态下的线程转入就绪状态;运行状态下的线程 调用Thread.yield()进入就绪状态后,和其它就绪原创 2020-10-14 17:53:56 · 1822 阅读 · 0 评论