
java多线程
Hollake
这个作者很懒,什么都没留下…
展开
-
Java多线程基础知识总结
题目来源于网络,答案都是自己搜集或者自己总结得出 ,如有错误,请指出谢谢~1) 什么是线程?线程是现代操作系统调度的最小单元。例如启动一个java程序,这时操作系统便会创建一个java进程,在一个进程中可以创建多个线程,每个线程都有自己的计数器、堆栈内存和局部变量等属性,而且可以访问共享的内存变量。而每个java程序其实都是多线程的,例如一个print("hello world")的简单程序...原创 2019-04-22 17:51:52 · 303 阅读 · 0 评论 -
Java并发AQS队列同步器源码学习笔记
如果你恰巧翻到了这篇文章,建议可以看这两篇文章,写的很好。Java并发之AQS详解,(JDK)ReetrantLock手撕AQS。前言锁和AQS的关系在讲队列同步器AbtstractQueuedSynchronizer(AQS,下文简称为同步器)之前,先了解锁和它的关系。AQS是实现锁或者说很多同步组件的关键,我们可以从源码中看到很多类继承了AQS,例如重入锁,读写锁等等。换句话说,锁...原创 2019-05-07 16:14:17 · 377 阅读 · 0 评论 -
ArrayBlockingQueue、LinkedBlockingQueue区别?
前言本篇文章首先对阻塞队列中最常用的两个队列ArrayBlockingQueue、LinkedBlockingQueue做一个大致介绍,接着介绍使用阻塞队列实现生产者-消费者模式。ArrayBlockingQueueArrayBlockingQueue是接口BlockingQueue的阻塞实现队列之一。基于数组实现的一个阻塞队列,在创建对象时必须制定容量大小。并且可以指定公平性与非公平...原创 2019-05-10 11:32:49 · 3614 阅读 · 0 评论 -
Java很简单的死锁例子
Java死锁常见原因这里说一下简单的两个线程死锁案例,线程1先拿到了a锁,在没有释放a锁的情况下想要拿b锁,而线程2正好相反,在没有释放b锁的情况下想要去拿a锁,所以两个线程就处于阻塞状态,都在等待对方释放锁,这就造成了死锁。看下面这个简单例子,很简单,线程1拿到a锁后睡眠了5ms,接着去拿b锁,线程2拿到b锁后睡眠了5ms,接着去拿a锁,所以目前的状态就是,线程1在等b锁,线程2在等a锁...原创 2019-05-07 17:27:21 · 1190 阅读 · 0 评论 -
线程池详解
这两篇关于线程池的博客写的很好,很全,可以参考一下线程池面试题总结Java-线程池专题 (美团面试题)转载 2019-05-15 11:42:10 · 184 阅读 · 0 评论 -
聊聊并发——Fork/Join 框架介绍
转自聊聊并发(八)——Fork/Join 框架介绍作者讲的比较好,我把作者的例子实现了一遍,如下:package thread;import java.util.concurrent.*;/** * Created by Administrator on 2019\4\30 0030. */public class ThreadLocalTest { publi...转载 2019-05-10 15:18:23 · 227 阅读 · 0 评论 -
Thread.join()与countDownLatch
前言countDownLatch允许一个或者多个线程等待其他线程完成操作后才能够执行,那么join方法也可以实现这种效果,代码如下,主线程等其他线程执行完以后才能够执行,也就是每次在其他线程在主线程中调用join方法时,main方法所在线程会阻塞进行等待,只有等调用join的线程执行完成,主线程才会执行,join的具体详解可以参考Java多线程join方法实例分析。Join实现pub...原创 2019-05-13 13:26:26 · 436 阅读 · 0 评论 -
voliate实现原理总结---Java
先说结论volatile三个特点如果一个字段被申明为volatile,那么Java内存模型则可以保证多个线程所看到的值是一致的。 禁止指定重排。 volatile只能保证可见性,不能保证原子性。volatile定义和实现原理java语言规范第三版中对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获...原创 2019-05-27 17:37:52 · 3292 阅读 · 0 评论 -
synchronized的实现原理以及锁优化
前言为了巩固帮助自己记忆锁优化的相关知识,今天对其做一些总结。synchronized在多线程并发编程中一直是元老级人物,而且在JDK1.6之前由于实现同步所带来的性能消耗过大,因而被称为重量级锁,随着JDK1.6对synchronized的各种优化,产生了偏向锁,轻量级锁,自适应锁等,它现在也就没有那么重量级了。实现原理synchronize是如何实现同步操作的呢?它通过以下三种...原创 2019-05-31 14:51:53 · 511 阅读 · 0 评论 -
Java中的锁分类
好文章就应该带着链接分享出来大家一起学习https://www.cnblogs.com/qifengshi/p/6831055.html在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁上面是很多锁的名词,这...转载 2019-06-21 17:03:22 · 158 阅读 · 0 评论 -
多线程交替打印AB或者字符串,生产者消费者,死锁等例子
目录使用wait和notify实现生产者消费者使用阻塞队列来实现生产者消费者模式两线程交替打印AB简单死锁例子这个也是交替打印AB交替打印字符串,例如:hello world使用wait和notify实现生产者消费者public class Main2 { public static void main(String[] args) { ...原创 2019-06-24 21:45:38 · 2438 阅读 · 0 评论 -
ReentrantLock(重入锁)tryLock()、unLock()源代码详细学习笔记
前言前几天学习了解了AQS也叫列同步器AbtstractQueuedSynchronizer的相关源码,今天静下心学习了看了看重入锁的相关源码,在看这篇文章之前希望你可以对ASQ有一定的了解,因为AQS是实现重入锁,读写锁等等的关键,这是自己的学习AQS的链接Java并发AQS队列同步器源码学习笔记,如果不想看的话可以看这篇Java并发之AQS详解,写的很好。在这篇文章中我主要讲一下对重入锁主...原创 2019-05-09 16:16:57 · 1859 阅读 · 0 评论 -
Lock 与 Synchronized 的区别?
锁是什么?能干什么?锁是用来控制多个线程访问共享资源的方式。一般来说,一个锁可以防止多个线程同时访问共享资源(但是例如读写锁,它允许多个线程对共享资源进行同时访问)Lock 与 Synchronized 区别属性 Synchronized关键字 Lock接口 存在层次 关键字,jvm级别 API级别 能否判断是否获得锁 不能判断 可以判断 ...原创 2019-05-06 10:01:09 · 232 阅读 · 0 评论 -
Java创建多线程的四种方式
java有以下四种创建多线程的方式:1):继承Thread类创建线程 2)实现Runnable接口创建线程 3)使用Callable和FutureTask创建线程 4)使用线程池,例如用Executor框架创建线程1)继承Thread类创建线程步骤如下:定义一个继承Thread线程类的类,在类中重写run方法。 在main函数中实例化这个类,初始化实现r继承Thread类的对象。...原创 2019-04-23 16:25:11 · 709 阅读 · 0 评论 -
ConcurrentHashMap源码学习笔记(jdk1.8)
为什么要使用ConcurrentHashMap?首先我们先讨论一下为什么要使用ConcureentHashMap,为了线程安全?确实是为了线程安全,但不知这个原因,因为HashMap在多线程下不安全,但是HashTable是线程安全的,完全可以使用HashTable,那为什么不呢?这是因为HashTable相比HashMap在所有方法上都添加了synchronized关键字来修饰,即:Hash...原创 2019-04-28 11:07:58 · 813 阅读 · 0 评论 -
Java原子操作的两种方法及实现原理
原子操作的意思是"不可被中断的一个操作或者一系列操作"实现方式使用循环CAS实现原子操作 使用锁机制实现原子操作首先我们看一个例子,10个线程同时存钱,每个线程每次存10000,最终我们想看的结果应该是10*10000 = 100000,但是结果呢?public class Test { private static final int THREDS_COUNT = 10...原创 2019-04-29 09:19:46 · 1336 阅读 · 0 评论 -
Java的六种线程状态(不是五种)
网上的文章鱼龙混杂,对于Java到底几种线程状态?这个问题,根据《Java并发编程》这本经典的教材里提到的,是六种状态,不是很多文章中提到的五种状态。这些文章中所提到的是操作系统的五种状态Java线程的六种状态状态名称 说明 NEW 初始状态,线程刚被构建,但是还没有调用start()方法 RUNNABLE 运行状态,Java系统系统中将操作系统中的就绪和运行两种...原创 2019-04-29 13:28:38 · 5655 阅读 · 2 评论 -
ThreadLocal源码学习笔记
前言首先先对ThreadLocalz做一个简单介绍,接着学习一下set,get,remove方法,接着简单分析一下为什么可能会存在内内存泄漏。ThreadLocal是什么ThreadLocal是一个以ThreadLoacl自身为键,任意对象为值的存储数据结构,它是附带在线程上的。这些变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。...原创 2019-05-05 15:09:24 · 218 阅读 · 0 评论 -
Java多线程join方法实例分析
定义首先看一下相关教材上怎么说的:如果一个线程A执行了thread.join()语句,其含义是:当前线程A等待thread线程终止后才从thread方法返回。接下来我们直接看例子,不出意外,和我们预想的一样,线程A和线程B交替输出结果。public class LockTest { public static void main(String[] args) throws I...原创 2019-05-08 10:31:46 · 1343 阅读 · 0 评论 -
java线程中的WAITING和BLOCKED有什么区别?
WAITING状态当前线程调用object.wait方法后,释放对象锁,这个状态就是WAITING状态,线程处于等待队列,等待其他线程同一个对象调用notify或者notifyAll方法。BLOCKED状态在调用notify或者notifyAll方法后,调用wait的等待线程不会立刻从等待队列返回,而是从等待队列移动到同步队列,准备竞争对象监视器的这种状态就是BLOCKED,换句话说就是如果...原创 2019-04-30 09:38:39 · 3125 阅读 · 0 评论 -
多线程run()中如何捕获运行时异常?
在实现Runnable或者继承Thread类实现多线程的时候,都要实现或者重写run()方法,查看源码可以看到run()是不允许抛出异常的,那么如果在run()方法中产生了运行时异常如何捕获呢?Thread类中有UncaughtExceptionHandler这个接口来实现对异常的捕获,我们只需将其方法重写,创建这个实现类的实例O,在线程start之前,使用thread.setUncaught...原创 2019-05-08 13:43:02 · 4024 阅读 · 0 评论 -
用 wait-notify解决生产者-消费者问题
直接看代码,有注释import java.util.LinkedList;import java.util.Queue;/** * Created by Administrator on 2019\5\8 0008. */public class MyTest { public static void main(String[] args){ // 创建共...原创 2019-05-08 15:55:14 · 502 阅读 · 0 评论 -
JVM找出占用CPU最高的线程
这篇文章写的比较清晰可以看一下JVM找出占用CPU最高的线程转载 2019-05-08 17:33:46 · 899 阅读 · 0 评论 -
关于同步,异步,阻塞,非阻塞,IOCP/epoll,select/poll,AIO ,NIO ,BIO的总结
昨天面试的时候没有答上来同步与异步,阻塞与非阻塞的区别,回来搜了一下,发现这篇文章写的不错,转载学习一下,链接如下:https://blog.youkuaiyun.com/chen8238065/article/details/48315085相关资料IO基本概念Linux环境同步异步阻塞非阻塞同步与异步阻塞与非阻塞IO模型Reference Link阻塞IO模型非阻塞IO模型IO复用模...转载 2019-08-14 16:37:00 · 467 阅读 · 1 评论