
Java
文章平均质量分 80
michael_ma_
一只大菜鸟。
展开
-
Java关键字之enum
使用枚举之前必须了解一下,枚举是什么东西。原创 2014-11-03 09:50:03 · 1212 阅读 · 0 评论 -
Comparable和Comparator接口的区别
Java中comparable接口和comparator接口都是自定义实现排序的两个接口的。他们的主要区别是什么呢?下来看两个例子说明问题:我们有一个对象Book,他有两个属性,分别是name和price;public class book { private int price; private String name; public int getPrice() { return原创 2015-03-01 22:57:49 · 585 阅读 · 0 评论 -
Atom类源码分析
今天再看《Java并发编程实践》的时候提到了这样一句话:volatile关键字只能保证变量的可见性,无法保证变量的原子性。当时没懂,搜了几个事例分析了一下,顺便也分析一下可以保证原子性的atom类的源码(这里以AtomInteger为例)先看一下volatile无法保证原子性的事例:class IntegerTestThread implements Runnable{ p原创 2015-04-19 23:07:53 · 2182 阅读 · 0 评论 -
【多线程_basic】 Java多线程回顾与复习
好久没用多线程了,复习一下~~1.几种调用多线程的方式(部分源码摘自 《Thinking in Java》)①:实现Runnable接口,见下面例子:class LiftOff implements Runnable{ protected int countDown=10; private static int taskCount=0; private final int i原创 2015-03-11 09:42:12 · 392 阅读 · 0 评论 -
【多线程_并发工具】 闭锁-CountDownLacth
主要的例子,参考自博客:http://blog.youkuaiyun.com/lmj623565791/article/details/26626391。先看一个问题:每天起早贪黑的上班,父母每天也要上班,话说今天定了个饭店,一家人一起吃个饭,通知大家下班去饭店集合。假设:3个人在不同的地方上班,必须等到3个人到场才能吃饭,用程序如何实现呢?不正确的实现1. package原创 2015-04-25 21:29:25 · 1246 阅读 · 0 评论 -
【多线程_basic】 wait/notify/notifyAll
转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/17225469在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调用notify()方法或notifyAll()方法),在线程中转载 2015-04-27 10:26:58 · 392 阅读 · 0 评论 -
【多线程_生产者消费者队列】
就以alibaba的笔试题举例吧。题目大概的意思如下:有一个篮子,最多容纳5个苹果。有人一直往里放苹果。有人一直去苹果。写出实现。ali要求不能用concurrent包里面的东西,所以只能用最简单的notify和wait。如果可以用concurrent包里面的东西,还可以用blockingqueue和signal、await。下面实现三种方式:Method1. n原创 2015-04-27 10:30:16 · 496 阅读 · 0 评论 -
【多线程_并发工具】 栅栏_CyclicBarrier
栅栏:阻塞一组线程直到某个事件发生。从概念理解起来,你可能会说:这不和闭锁一样吗?栅栏和闭锁的最大区别就是:所有线程必须同时到达栅栏位置,才能执行。闭锁:用于等待时间。栅栏:用于等待其他线程。除此之外,闭锁是一次性对象,一旦进入终止状态,就不能重置。而栅栏可以使一定数量的参入方反复的在栅栏位置汇集。栅栏的主要方法:await()awa原创 2015-04-27 16:54:54 · 1039 阅读 · 0 评论 -
【多线程_提高】 Java中断机制
1. 引言当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。如果对Java中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。中断机制是如何工作的?捕获或检测到中断后,是抛出Inte转载 2015-04-28 15:04:59 · 432 阅读 · 0 评论 -
【多线程_提高】 synchronized VS lock
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断 如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长转载 2015-05-15 10:49:37 · 497 阅读 · 0 评论 -
【多线程_并发工具】 信号量_Semaphore
信号量可以用来限制访问公共资源。在访问公共资源之前,线程必须从信号量获取许可。在访问资源之后,这个线程必须将许可返回给信号量.主要方法: void acquire() 从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。 void release() 释放一个许可,将其返回给信号量。 Semaphore可以用于实现资原创 2015-05-06 21:36:50 · 580 阅读 · 0 评论 -
【多线程_提高篇】 thread.stop禁用的原因
为什么不能使用Thread.stop()方法?从SUN的官方文档可以得知,调用Thread.stop()方法是不安全的,这是因为当调用Thread.stop()方法时,会发生下面两件事:1. 即刻抛出ThreadDeath异常,在线程的run()方法内,任何一点都有可能抛出ThreadDeath Error,包括在catch或finally语句中。2. 释放该线程所持有的所有的锁转载 2015-05-15 08:45:58 · 3914 阅读 · 2 评论 -
【多线程_提高篇】 线程的关闭
在之前的JDK版本中,线程的停止可以使用其自带的API,thread.stop、thread.suspend等;然后在之后就被废弃。原因可以看下我转载的blog:thread.stop被废弃的原因。同时在那篇博客中提到了三种停止线程的方法:1. 使用violate boolean变量来标识线程是否停止2. 停止线程时,需要调用停止线程的interrupt()方法,因为线程有可能在wai原创 2015-05-15 09:05:37 · 719 阅读 · 0 评论 -
【多线程_提高】 在现有的线程安全的类中添加功能
本节内容摘自《Java 并发编程实践》。问题:向一个线程安全的类中添加一个线程安全的方法。Solution1.修改原始的类,在原始类中进行新的方法编写并且加上锁。当我们无法修改原始的类,我们应该怎么办呢?Solution2.扩展这个类。如果在设计的时候这个类考虑了可扩展性。比如BetterVector 扩展 Vector;//正确的实现@ThreadSafepublic原创 2015-04-22 21:46:43 · 979 阅读 · 0 评论 -
动态代理
最近在看AOP源码,先熟悉下JDK动态代理、Cglib、ASM相关的一些东西。一.静态代理的缺点: 想想如果我们要用静态代理的方式去实现B中内的method(),我们应该如何做? 肯定是先将方法抽象到一个接口,代理类和B都去实现此接口,然后在代理类中有B的对象,在掉代理类的method时候,内部方法实际掉的B的method~~~~ 那么问题来了,如果原创 2015-04-15 09:28:45 · 499 阅读 · 0 评论 -
Java序列化总结--基础篇
一.什么是Java序列化: 所谓的序列化就是说:将那些实现了Serializable接口的对象转化为一个字节序列,并以后能将这个字节序列完全的恢复为原来的对象。被序列化后的对象可以通过网络流传播、亦或是存入到本地的文件当中。实现对象的持久化。二.序列化的实现: 将要被序列化的对象必须要实现Serializable接口,然后使用一个输出流(eg原创 2015-03-24 19:20:29 · 890 阅读 · 0 评论 -
Java之hashCode()函数
前两天在看内存泄露的问题时,注意到原创 2014-11-12 10:50:02 · 638 阅读 · 0 评论 -
Java关键字之final
Java关键字fianl会使用到的三个地方:数据、方法和类。1.原创 2014-07-01 00:44:31 · 601 阅读 · 0 评论 -
cmd中编译java文件
javac 文件名.java 编译,将.java->.classjavap原创 2014-10-17 12:01:48 · 747 阅读 · 0 评论 -
Java的自动包装、拆箱。
基本类型到其他的包装类,原创 2014-11-25 12:24:04 · 702 阅读 · 1 评论 -
Java中的接口与抽象类的区别
Java抽象类与接口的在定义上的区别主要有以下几个方面:1.访问权限:在接口中,只能是public类型的,不能为private或者protected或者默认的包访问权限。在抽象类中,访问权限可以为public 、private 、 protected 、或者默认权限。2.成员变量:在接口中,成员变量只能为public static的。即使你在接口中 写的诸如public int原创 2015-03-01 10:31:17 · 598 阅读 · 0 评论 -
Java多线程产生死锁的条件以及解决方法
摘自《Thinking in Java》:死锁产生的原因:1.互斥条件。任务使用的资源至少一个是不能共享的。2.至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源。3.资源不能被任务抢占。任务必须把资源释放当做普通事件。4.必须有等待循环。要发生死锁,上述条件必须全部都满足;所以要防止死锁的话,只需要破坏其中的一个即可。在程序中,最容易防止死锁的方法原创 2015-03-26 02:01:41 · 2099 阅读 · 0 评论 -
Java中PriorityQueue
刷题的时候遇到了一个题要用到PriorityQueue,所以查查资料,以后备用。定义:public class PriorityQueueextends AbstractQueueimplements Serializable不同于传统的Queue,PriorityQueue并不是通常情况下,默认的FIFO,而是自定义一种优先级的方式,每次输出是最高优先级的数据,而不是第一次进入的原创 2015-03-27 23:38:11 · 3117 阅读 · 0 评论 -
HashMap源码解析
一起来看下定义: public class HashMap extends AbstractMap implements Map, Cloneable, Serializable集成AbstractMap类,实现了Map、Cloneable/常量定义: //存储数据的Entry数组,它的大小必须是2的幂 transient Entry[] t原创 2015-03-09 17:21:35 · 468 阅读 · 0 评论 -
fail-fast机制问题
参考博客:http://blog.youkuaiyun.com/chenssy/article/details/38151189。 写的很详细了。转载 2015-03-10 00:15:19 · 555 阅读 · 0 评论 -
ThreadLocal解析
作为防止线程在共享资源上产生冲突的第二种方法,本地线程,随便自己平常很少用,但是在各类框架:Spring、Struts2等却用的异常频繁。先看《Thinking in Java》上的一个例子:public class ThreadLocalVariableHolder { //通过匿名内部类的方式覆盖ThreadLocal的initialValue()方法,制定初始值。 priva原创 2015-03-11 23:04:46 · 398 阅读 · 0 评论 -
hashtable源码分析
虽然hashtable已经不经常用了,但是面试时候还会有很多人问道他与HashMap之间的区别,下来简单看下他和HashMap有什么区别吧~~首先定义:public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable 在定义部分可以看见,HashMap集成的Abstract原创 2015-03-09 20:56:37 · 394 阅读 · 0 评论 -
ConcurrentHashMap实现分析
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅转载 2015-03-30 20:36:04 · 689 阅读 · 0 评论 -
HashMap 死循环的问题
在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然出现问题。但是,我发现近几年,很多人都经历过这个事(在网上查“HashMap Infinite Loo转载 2015-07-10 10:03:23 · 806 阅读 · 0 评论