随笔分类 -  Java多线程

摘要:Java回收对象的标记 和 对象的二次标记过程 二次标记 针对这个问题,虚拟机的做法是进行两次标记,即第一次标记不在“关系网”中的对象。第二次的话就要先判断该对象有没有实现finalize()方法了,如果没有实现就直接判断该对象可回收;如果实现了就会先放在一个队列中,并由虚拟机建立的一个低优先级的线 阅读全文
posted @ 2019-04-24 08:23 CS408 阅读(1131) 评论(0) 推荐(0) 编辑
摘要:背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余。所以这篇博客是要深入总结线程池的使用。 ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4种状态) 2.任务的执行(工作过程) 3.线程池中的线程初始化 4.任务缓存队列及排队策略 5.任务 阅读全文
posted @ 2019-04-16 07:42 CS408 阅读(290) 评论(0) 推荐(0) 编辑
摘要:背景:这篇博客用来总结java锁相关的知识点,平时还是要自己多加练习 wait 和 notify以及notifyAll (1)、方法介绍1.wait、notify以及notifyAll都是Object对象的方法,他们必须在被 synchronized 同步的方法或代码块中调用,否则会报错。2. 调用 阅读全文
posted @ 2019-03-15 08:19 CS408 阅读(1224) 评论(0) 推荐(0) 编辑
摘要:CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws  阅读全文
posted @ 2017-04-10 16:59 CS408 阅读(280) 评论(0) 推荐(0) 编辑
摘要:Java并发编程:Callable、Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程 阅读全文
posted @ 2017-04-10 16:58 CS408 阅读(302) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/yanhandle/article/details/9016329 阅读全文
posted @ 2016-11-15 23:28 CS408 阅读(191) 评论(0) 推荐(0) 编辑
摘要:场景: 线程池在面试时候经常会碰到,在工作中用的场景更多,所以很有必要弄清楚。 1 简介 Java自1.5以来加入了处理一批线程的方法,也就是java并发包里的Executor。本文主要介绍ExecutorService的用法,Runable和Callable的用法以及ExecutorComplet 阅读全文
posted @ 2016-11-15 23:03 CS408 阅读(304) 评论(0) 推荐(0) 编辑
摘要:场景:在学习单例模式时候,用到了锁synchronized的概念,在多线程中又用到了CountDownLatch的概念 jdk:https://docs.oracle.com/javase/7/docs/api/ 1 CountDownLatch 正如每个Java文档所描述的那样,CountDown 阅读全文
posted @ 2016-11-09 00:27 CS408 阅读(3640) 评论(0) 推荐(1) 编辑
摘要:Java并发编程:深入剖析ThreadLoca Java并发编程:深入剖析ThreadLocal 说下自己的理解:使用ThreadLocal能够实现空间换时间,重在理解ThreadLocal是如何复制线程副本,ThreadLocal中的四个方法,ThreadLocalMap的使用,在使用Thread 阅读全文
posted @ 2015-08-20 18:12 CS408 阅读(302) 评论(0) 推荐(0) 编辑
摘要:Java线程:大总结 Java线程是Java语言中一个非常重要的部分,Java5之前,多线程的语言支持还是比较弱的,内容也较少,写一个复杂的多线程程序是相当有挑战性的。 在Java5以后,Java对多线程做了很多扩展,扩展部分称之为并发包。这部分内容大大增强了Java多线程编程的能力,通过使用Jav 阅读全文
posted @ 2015-08-07 21:14 CS408 阅读(223) 评论(0) 推荐(0) 编辑
摘要:Java线程:新特征-原子量 所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题。在Java5之前,可以通过volatile、synchronized关键字来解决并发访问的安全问题,但这样太麻烦。 Java 阅读全文
posted @ 2015-08-07 21:12 CS408 阅读(219) 评论(0) 推荐(0) 编辑
摘要:Java线程:新特征-条件变量 条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。 这里的条件和普通意义上的条件表达式有着天壤之别。 条件变量都实现了java.ut 阅读全文
posted @ 2015-08-07 21:10 CS408 阅读(209) 评论(0) 推荐(0) 编辑
摘要:Java线程:新特征-信号量 Java的信号量实际上是一个功能完毕的计数器,对控制一定资源的消费与回收有着很重要的意义,信号量常常用于多线程的代码中,并能监控有多少数目的线程等待获取资源,并且通过信号量可以得知可用资源的数目等等,这里总是在强调“数目”二字,但不能指出来有哪些在等待,哪些资源可用。 阅读全文
posted @ 2015-08-07 21:09 CS408 阅读(296) 评论(0) 推荐(0) 编辑
摘要:Java线程:新特征-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。 现在Java终于有可返回值的任务(也可以叫做线程)了。 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnabl 阅读全文
posted @ 2015-08-07 21:06 CS408 阅读(231) 评论(0) 推荐(0) 编辑
摘要:Java线程:新特征-线程池 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。 有关Java5线程新特征的内容全部 阅读全文
posted @ 2015-08-07 21:02 CS408 阅读(191) 评论(0) 推荐(0) 编辑
摘要:熟读该文能学到很多。 Java并发编程:volatile关键字解析 volatile的原理和实现机制 前面讲述了源于volatile关键字的一些使用,下面我们来探讨一下volatile到底如何保证可见性和禁止指令重排序的。 下面这段话摘自《深入理解Java虚拟机》: “观察加入volatile关键字 阅读全文
posted @ 2015-08-07 21:01 CS408 阅读(161) 评论(0) 推荐(0) 编辑
摘要:Java线程:并发协作-生产者消费者模型 对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。 对于此模型,应该 阅读全文
posted @ 2015-08-07 21:00 CS408 阅读(271) 评论(0) 推荐(0) 编辑
摘要:Java线程:线程的同步-同步方法 线程的同步是保证多线程安全访问竞争资源的一种手段。 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需要考虑,是否有竞争资源被同时改动的问题? 在本文之前 阅读全文
posted @ 2015-08-07 20:57 CS408 阅读(182) 评论(0) 推荐(0) 编辑
摘要:Java线程:线程的交互 SCJP5学习笔记 线程交互是比较复杂的问题,SCJP要求不很基础:给定一个场景,编写代码来恰当使用等待、通知和通知所有线程。 一、线程交互的基础知识 SCJP所要求的线程交互知识点需要从java.lang.Object的类的三个方法来学习: void notify() 唤 阅读全文
posted @ 2015-08-07 20:55 CS408 阅读(299) 评论(0) 推荐(0) 编辑
摘要:Java线程:线程的同步与锁 一、同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。 public class Foo { private int x = 100; pu 阅读全文
posted @ 2015-08-07 20:47 CS408 阅读(161) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示