java多线程
Medlen
这个作者很懒,什么都没留下…
展开
-
进程和线程
1.什么是进程狭义:进程是正在运行的程序实例广义:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的基本单位进程的概念要注意两点:进程是一个实体。每一个进程都有它自己的独立地址空间进程是一个“执行中的程序”。只有当处理器执行这个程序时,它成为活动的实体2.什么是线程 &nbs...原创 2019-01-29 13:23:03 · 619 阅读 · 0 评论 -
关线程安全以及如何实现线程安全
有时候越是基础的概念,反而越是模糊。有时候先要对概念理解清楚。学习Java多线程,经常跟线程安全打交道,那么什么是线程安全呢?一、什么是线程安全《Java并发编程实践》中对线程安全有这样的定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程...原创 2019-03-18 20:44:16 · 376 阅读 · 0 评论 -
volatile关键字特性及原理
当一个变量被volatile修饰后,具有两个特性:保证此变量对所有线程的可见性禁止指令重排序优化volatile的使用场景运算结果不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值变量不需要与其他的状态变量共同参与不变约束volatile修饰的变量在赋值后多执行了一个“lock addl $0x0,(%esp)”操作。这个操作相当于一个内存屏障。只有一个CPU访问内存时...原创 2019-03-11 23:14:49 · 548 阅读 · 0 评论 -
synchronized底层实现原理及锁优化
一、概述1、synchronized作用原子性:synchronized保证语句块内操作是原子的可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现)有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)2、synchronized的使用修饰实例方法,对当前实例对象加锁修饰...原创 2019-03-11 19:02:26 · 75686 阅读 · 21 评论 -
ThreadPoolExecutor机制
1、概述ThreadPoolExecutor是java.util.concurrent包中的线程池类,它可根据参数的不同,构造出不同特性的线程池。掌握其构造方式和原理是极其重要的,如不了解其特性很容易造成OOM。2、核心构造器详解public ThreadPoolExecutor(int corePoolSize, int maxi...原创 2019-03-10 20:11:40 · 199 阅读 · 0 评论 -
ThreadFactory线程工厂
看一下这个接口的源码public interface ThreadFactory { /** * Constructs a new {@code Thread}. Implementations may also initialize * priority, name, daemon status, {@code ThreadGroup}, etc. *...原创 2019-03-10 11:49:07 · 1939 阅读 · 0 评论 -
详解BlockingQueue
1、特点:当从这个队列中取元素时,它支持这样的操作:如果队列为空,那它就等待队列不为空时,再执行取操作。当向这个队列中存元素时,它支持这样的操作:如果队列已满,那它就等待队列可用,再向队列中存放元素。下面BlockingQueue中的方法支持这样的操作,当不同的方法操作不能立即被满足,但是在将来可能被满足:第一个抛出异常,第二个返回一个特殊的值(null或false,取决于哪种操作),第三块...原创 2019-03-10 11:01:51 · 2831 阅读 · 0 评论 -
关于线程状态、阻塞操作以及中断操作的一些总结
1、线程的状态线程有5中状态;1、新建状态:当线程被创建时,它短暂的处于这种状态。此时他已经分配了必要的资源并进行了初始化。2、就绪状态:在这种状态下,只要调度器把时间 片分给线程,线程就可以运行。3、运行状态:在这种状态下,线程得到CPU时间,执行代码;4、阻塞状态:线程可以运行,但某个条件阻止它运行。5、死亡状态:死亡状态的线程是不可调度的。正常从run()返回,或者抛出异常。1...原创 2019-03-03 15:51:24 · 1626 阅读 · 0 评论 -
关于wait()和singaAll()的测试案例
1、模拟生产者和消费者import java.util.concurrent.ExecutorService;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import java.util.concurrent.SynchronousQueue;import jav...原创 2019-03-02 23:09:57 · 175 阅读 · 0 评论 -
java多线程中yield方法的含义
Thread.yield()方法:使当前线程从运行状态转为就绪状态。CPU会再次从就绪状态中的线程选择执行,刚刚的线程可能再次被选中执行。yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次...原创 2019-02-19 21:51:50 · 1449 阅读 · 0 评论 -
什么时候使用CyclicBarrier
CyclicBarrier适用于这样的情况:你希望创建一组任务,他们并行的执行工作,然后在进行下一个步骤之前等待,直到所有的任务都完成。这非常像CountDownLatch,只是CountDownLatch是只触发一次的事件,而CyclicBarrier可以多次重用。...原创 2019-03-02 11:06:23 · 371 阅读 · 0 评论 -
什么时候使用CountDownLatch
转载:原文链接: howtodoinjava翻译: ImportNew.com - 张涛译文链接: http://www.importnew.com/15731.html[ 转载请保留原文出处、译者和译文链接。]感谢作者写出这么好的文章,感谢译者!以上为译者原话。转载请注明!正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直...转载 2019-03-02 11:09:03 · 625 阅读 · 0 评论 -
java中常见的四种线程池
1.CachedThreadPool (弹性缓存线程池) 创建之初,线程池中没有一个线程,当通过execute()和submit()方法提交任务时,如果有空的线程,则用空的线程执行该任务,否则,创建新的线程来执行该任务。创建线程的最大值,取决于最大默认值。默认超过60s空闲,线程就会被回收。示例如下:import java.util.concur...原创 2019-01-29 22:02:09 · 2644 阅读 · 0 评论 -
java多线程实现的几种方式
1.通过继承Thread类实现public class MyThread extends Thread{ public void run(){ System.out.println("New Thread : "+Thread.currentThread().getName()); } public static void main (String []a...原创 2019-01-29 13:43:30 · 2636 阅读 · 0 评论 -
生产者消费者实现的两种方式(基于wait和notify,基于BlockingQueue)
1、基于wait和notify的实现import java.util.concurrent.*;class Consumer implements Runnable{ public void run(){ try{ while(!Thread.interrupted()){ synchronized(this){...原创 2019-03-22 20:19:51 · 193 阅读 · 0 评论