java
文章平均质量分 67
xxxknight
这个作者很懒,什么都没留下…
展开
-
2015年阿里面试题——多线程(生产者消费者模型)
题目:两个人,一个放苹果,一个人拿苹果。当苹果总数为5时,不能放苹果;当苹果总数为0时不能取。放苹果和取苹果两个过程为独立的过程。模拟该过程。package apple;public class TestApple { public static void main(String[] args) { Apple apple = new Apple(); Thr原创 2015-05-30 19:17:20 · 1250 阅读 · 0 评论 -
java多线程学习笔记(1)——基本概念介绍
一、进程与线程的区别 每个进程拥有自己的一整套变量,而线程则共享数据。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,线程总是属于某个进程,进程中的多个线程共享进程的内存。一个进程可以有一个或多个线程。二、java中的多线程使用java.lang.Thread类或者java.lang.Ru原创 2015-07-24 20:58:54 · 413 阅读 · 0 评论 -
java多线程学习笔记——concurrent包的一些类(Lock 和Condition)
1、ReentrantLock类API介绍 一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。 ReentrantLock 将由最近成功获得锁,并且还没有释放该锁的线程所拥有。当锁没有被另一个线程所拥有时,调用 lock 的线程将成功获取该锁并返回。如果当前线程已经拥有该锁,此方法将立即返回。可以使用 isH原创 2015-07-25 00:01:26 · 428 阅读 · 0 评论 -
java多线程学习笔记——有关多线程的文章连接汇总
1、有关synchronized和Lock类的实现 http://blog.csdn.net/chen77716/article/details/6618779 http://blog.csdn.net/chen77716/article/details/6641477原创 2015-07-25 19:35:55 · 380 阅读 · 0 评论 -
java多线程学习笔记——读写锁(ReentrantReadWriteLock)
一、ReentrantReadWriteLock类如果很多线程从一个数据结构读取数据而很少线程修改其中数据的话。允许对读者线程共享访问是合适的。写者线程依然必须是互斥访问的。 下面是使用读写锁的必要步骤: 1)构造一个ReentrantReadWriteLock对象:private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(转载 2015-07-25 18:10:56 · 630 阅读 · 0 评论 -
java多线程学习笔记——synchronized关键字
一、synchronized关键字概述 JAVA中每一个对象都有一个内部锁,如果一个方法用synchronized关键字声明,那么对象的锁将保护整个方法。也就说,要调用该方法,线程必须获得内部的对象锁。下面两段代码等价:public synchronzied void method(){ method body}等价于:public void method(){ this.int原创 2015-07-25 00:49:44 · 665 阅读 · 0 评论 -
java多线程学习笔记——volatile关键字
volatile关键字为实例域的同步访问提供了一种免锁机制。如果声明一个域为volatile,那么编译器和虚拟机就知道该域是可能被另一个线程并发更新的。例如,假定一个对象有一个布尔标记done,它的值被一个线程设置却被另一个线程查询。你可以使用synchronized关键字:public synchronized boolean isDone(){return done;}public synch转载 2015-07-25 15:13:58 · 460 阅读 · 0 评论 -
java多线程学习笔记(2)——中断线程
当对一个线程调用线程终止方法时,线程的中断状态将被置位。这是每一个线程都具有的boolean标志。每个线程都应该时不时地检查这个标志,以判断线程是否被中断。 要想弄清中断状态是否被置位,首先调用静态的Thread.currentThread方法获得当前线程,然后调用isInterrupted method方法: while(!Thread.currentThread().isInterrupte原创 2015-07-24 22:11:06 · 331 阅读 · 0 评论 -
java多线程学习笔记——yield()、wait()、sleep()等方法
1、sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。 例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行完转载 2015-07-25 15:23:43 · 610 阅读 · 0 评论 -
JVM学习笔记(1)——类加载器ClassLoader
1、 Java虚拟机与程序的生命周期在如下几种情况下,Java虚拟机将结束生命周期执行了System.exit()方法程序正常执行结束程序在执行过程中遇到了异常或错误而异常终止由于操作系统出现错误而导致Java虚拟机进程终止2、类的加载、连接、初始化(不涉及对象生成) (1)加载:查找并加载类的二进制数据 (2)连接 – 验证:确保被加载的类的正确性 – 准备:为类转载 2015-07-01 00:28:12 · 308 阅读 · 0 评论 -
java多线程学习笔记——锁测试与超时
线程在调用lock方法来获得另一个线程所持有的锁的时候,很可能发生阻塞。应该更加谨慎地申请锁。tryLock方法试图申请一个锁,在成功获得锁后返回true,否则,立即返回false,而且线程可以立即离开去做其他事。可以调用tryLock时,使用超时参数。 lock方法不能被中断。如果一个线程在等待获得一个锁时被中断,中断线程在获得锁之前一直处于阻塞状态。如果出现死锁,那么,lock方法就无法终止。转载 2015-07-25 16:14:54 · 1579 阅读 · 0 评论 -
java多线程学习笔记——相关名词介绍
阻塞线程节点队列 CHL Node queue 。 根据论文里描述, AQS 里将阻塞线程封装到一个内部类 Node 里。并维护一个 CHL Node FIFO 队列。 CHL 队列是一个非阻塞的 FIFO 队列,也就是说往里面插入或移除一个节点的时候,在并发条件下不会阻塞,而是通过自旋锁和 CAS 保证节点插入和移除的原子性。实现无锁且快速的插入。关于非阻塞算法可以参考 Java 理论与实践:原创 2015-07-25 23:56:56 · 320 阅读 · 0 评论 -
jvm笔记
Jvm3个主要区域: 1、虚拟机栈:线程私有 2、JAVA堆:新生代(eden空间、Survivor空间)、老年代。 3、方法区(有时叫永久代):包含运行时常量池、放jar包、Class文件。gc均会导致(stop the world现象产生,即产生停顿) 对象分配: 对象首先分配在eden和from survivor。少数大对象直接分配在老年代。如果eden和from survivor不转载 2016-03-27 10:29:35 · 362 阅读 · 0 评论