java多线程与并发
Java开发面试辅导-海龟老师
毕业于浙江大学软件工程硕士,在BAT一线大厂担任架构师工作,作为面试官有丰富的面试经验,以及项目架构经验
展开
-
Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例
1.使用Lock和Condition的意义 JDK1.5中提供了多线程升级的解决方案。 1.将同步synchronized替换成现实Lock操作。 2.将Object中的wait,notify,notifyAll,替换为了Condition对象 3.该Condition对象可以对Lock锁进行获取。 4.使用Condition对象,能够实现本方只唤原创 2015-12-13 16:37:02 · 841 阅读 · 0 评论 -
(java并发)ScheduledThreadPoolExcutor
1.用timer缺点非常大Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。我们关于定时/周期操作都是通过Timer来实现的。但是Timer有以下几种危险a. Timer是基于绝对时间的。容易受系统时钟的影响。 b. Timer只新建了一个原创 2016-03-20 17:46:00 · 7754 阅读 · 1 评论 -
(多线程与并发)面试题03--java中读写锁ReadWriteLock
1.排他锁(互斥锁)的概念:synchronized,ReentrantLock这些锁都是排他锁,这些锁同一时刻只允许一个线程进行访问。2.读写锁的概念:分为读锁和写锁,多个读锁不互斥,读锁和写锁互斥,写锁与写锁互斥。3.读写锁的好处: 原来使用的互斥锁只能同时间有一个线程在运行,现在的读写锁同一时刻可以多个读锁同时运行,这样的效率比原来的排他锁(互斥锁)效率高原创 2015-12-27 15:43:13 · 2784 阅读 · 0 评论 -
Java的类锁和对象锁
类锁和对象锁不是同1个东西,一个是类的Class(对应的唯一的一个即这类的二进制字节码)对象的锁,1个是类的实例(!即new出的一个类的对象,一个类会有多个实例对象)的锁。也就是说:1个线程访问静态synchronized的时候,允许另一个线程访问对象的实例synchronized方法。反过来也是成立的,因为他们需要的锁是不同的。对象锁:java的所有对象(即new出的一个类的对象,一原创 2015-12-18 09:16:04 · 2761 阅读 · 0 评论 -
(java多线程并发)concurrent包的实现
concurrent包的实现原创 2016-01-02 21:51:37 · 692 阅读 · 0 评论 -
(java并发)CAS操作原理以及Atomic的原理
CAS操作可以分为以下三个步骤: 步骤 1.读旧值(即从系统内存中读取所要使用的变量的值,例如:读取变量i的值) 步骤2.求新值(即对从内存中读取的值进行操作,但是操作后不修改内存中变量的值,例如:i=i+1,这一步只进行 i+1,没有赋值,不对内存中的i进行修改) 步骤3.两个不可分割的原子操作第一步:比较内存中变量现在的值与 最开原创 2016-01-02 21:47:20 · 1702 阅读 · 0 评论 -
(java多线程并发)控制并发线程数的Semaphore
1.简介 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。2.概念 Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。以一个停车场运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人原创 2016-01-02 15:58:49 · 10235 阅读 · 1 评论 -
(java多线程与并发)java并发库中的阻塞队列--BlockingQueue
1.阻塞队列的概念 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列,下图展原创 2016-01-02 13:52:13 · 1353 阅读 · 0 评论 -
Java 多线程(四)强制运行Join
在线程操作中,可以使用join()方法让一个线程强制运行,线程强制运行期间,只有该线程拥有CPU的执行权,其他线程无法运行,必须等待此线程完成之后才可以继续执行。运行的主方法运行结果原创 2015-12-13 20:06:18 · 1711 阅读 · 0 评论 -
Java 多线程(二)线程间的通信应用--生产者消费者(未完)
对于多个生产者和消费者。为什么要定义while判断标记。原因:让被唤醒的线程再一次判断标记。为什么定义notifyAll,因为需要唤醒对方线程。因为只用notify,容易出现只唤醒本方线程的情况。导致程序中的所有线程都等待。启动主类/** * */package threadCommnication;/** * Title: InputOu原创 2015-12-13 12:46:33 · 557 阅读 · 0 评论 -
Java 多线程(一)线程间的通信
1.线程间通讯的理解线程间通讯: 其实就是多个线程在操作同一个资源,但是操作的动作不同2.线程间通信的示例代码 描述:存在两个线程,一个线程负责写入信息,另一个线程负责打印信息。 model类Student 属性name sex (私有类) 线程:Input类,Output类。 启动两个线程分别执行打印和写入操作。原创 2015-12-12 21:49:19 · 705 阅读 · 0 评论 -
Java 多线程(四)线程间的通信jdk1.5中Lock,Condition----各种锁的相关详细概念
一.java.util.concurrent.locks包下常用的类 下面我们就来探讨一下java.util.concurrent.locks包中常用的类和接口。 1.Lock 首先要说明的就是Lock,通过查看Lock的源码可知,Lock是一个接口:12345678原创 2015-12-13 17:33:52 · 1925 阅读 · 1 评论 -
ThreadLocal的使用
ThreadLocal的定义和用途的概述(我的理解):它是一个线程级别变量,在并发模式下是绝对安全的变量,也是线程封闭的一种标准用法(除了局部变量外),即使你将它定义为static,它也是线程安全的。 ThreadLocal能做什么呢?这个一句话不好说,我们不如来看看实际项目中遇到的一些困解:当你在项目中根据一些参数调用进入一些方法,然后方法再调用方法,进而跨对象调转载 2017-11-01 10:55:30 · 864 阅读 · 0 评论