« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
本博客在此声明所有文章均为转摘,只做资料收集使用。并无其他商业用途。 |
Blog信息 |
blog名称: 日志总数:210 评论数量:205 留言数量:-19 访问次数:918187 建立时间:2007年5月10日 |

| |
[J2SE相关]synchronized和wait()/notify() 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2009/11/7 21:32:05 |
方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。
wait()/notify():调用任意对象的 wait() 方法导致线程阻塞,并且该对象上的锁被释放。而调用 任意对象的notify()方法则导致因调用该对象的 wait() 方法而阻塞的线程中随机选择的一个解除阻塞(但要等到获得锁后才真正可执行)。
synchronized和wait()、notify()的关系:
1.有synchronized的地方不一定有wait,notify
2.有wait,notify的地方必有synchronized.这是因为wait和notify不是属于线程类,而是每一个对象都具有的方法,而且,这两个方法都和对象锁有关,有锁的地方,必有synchronized。
另外,请注意一点:如果要把notify和wait方法放在一起用的话,必须先调用notify后调用wait,因为如果调用 |
|
[J2SE相关]Java内部类(Inner Class)详解[转] 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2009/10/30 13:24:20 |
关键字: java inner class nested
简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。
1 Static member class(静态成员类)
类声明中包含“static”关键字的内部类。如以下示例代码,
Inner1/Inner2/Inner3/Inner4就是Outer的四个静态成员类。静态成员类的使用方式与一般顶层类的使用方式基本相同。
java 代码
public class Outer{
//just like static method, static member class has public/private/default access privilege levels
//access privilege level: public
public static class Inn |
|
[J2SE相关]转:图解JVM在内存中申请对象及垃圾回收流程 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2009/10/6 21:28:20 |
关键字: jvm 内存 gc
先看一下JVM的内存模型:
从大的方面来讲,JVM的内存模型分为两大块:
永久区内存( Permanent space )和堆内存(heap space)。
栈内存(stack space)一般都不归在JVM内存模型中,因为栈内存属于线程级别。
每个线程都有个独立的栈内存空间。
Permanent space里存放加载的Class类级对象如class本身,method,field等等。
heap space主要存放对象实例和数组。
heap space由Old Generation和New Generation组成,Old Generation存放生命周期长久的实例对象,而新的对象实例一般放在New Generation。
New Generation还可以再分为Eden区(圣经中的伊甸园)、和Survivor区,新的对象实例总是首先放在Eden区,Survivor区作为Eden区和Old区的缓冲,可以向Old区转移活动的对象实例。
下图是JVM在内存空间(堆空间)中申请新对象过程的活动图(点 |
|
[J2SE相关]java.nio.Buffer分析 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2009/8/20 17:55:18 |
在研究Apache Mina源代码时,在IoFilter中使用IoBuffer做为数据缓冲对象,而IoBuffer的实现来自于java.nio.Buffer。Buffer中的flip()、clear()、reset()、mark()等概念让我有点糊涂,仔细看了jdk的文档说明,才对Buffer对象的概念了然于胸。
在Buffer类当中有以下四个重要的属性:
mark:标记位,用于reset()时把position恢复到原来的位置,调用mark()方法使position的值赋与mark
position:表示Buffer中第一个可以被读取或写入的数据的位置,每次调用put()方法时,把写入的数据放到position位置,然后position的值就会加1
limit:表示buffer中第一个不可被读取或写入的数据的位置,也即停止位,数据操作到此为止
capacity:初始化时调用allocate(int size)为buffer分配的空间大小,不可变
演示代码如下:
view plaincopy to clipboardprint?
import |
|
[J2SE相关]javanio:java nio本质与精要 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2009/6/25 16:19:58 |
NIO之关键: 1.数据缓冲(Buffer)处理 数据缓冲是IO操作的基本元素.从本质上来说,无论是磁盘还是网络IO,应用程序所作的所有事情就是把数据放到相应的数据缓冲当中去(写操作),或者从相应的数据缓冲中提取数据(读操作).至于数据缓冲中的数据IO设备之间的交互,则是操作系统和硬件驱动程序所关心的事情了.因此,数据缓冲在IO操作中具有重要的作用,是操作系统与应用之间的IO桥梁. 在java.nio中, "Direct ByteBuffer"是一个值得关注的Buffer类型.在创建ByteBuffer的时候可以使用ByteBuffer.allocateDirect()来创建一块直接(Direct)的ByteBuffer.这一块数据缓冲和一般的缓冲不一样.第一,它是一块连续的空间.第二,它的实现不是纯java的代码,而是本地(native)代码.它内存的分配不在Java的堆栈中,不受java内存回收的影响. |
|
[J2SE相关]JAVA面试题解惑系列(十一)——这些运算符你是否还记得? 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2008/10/27 12:00:00 |
关键字: java 面试题 自增 自减 位运算符
作者:臧圩人(zangweiren) 网址:http://zangweiren.javaeye.com
>>>转载请注明出处!<<<
有些运算符在JAVA语言中存在着,但是在实际开发中我们或许很少用到它们,在面试题中却时常出现它们的身影,对于这些运算符的含义和用法,你是否还记得呢?
自增(++)和自减(--)运算符
我们先来回答几个问题吧:
Java |
|
[J2SE相关]JAVA面试题解惑系列(十)——话说多线程 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2008/10/27 11:02:04 |
关键字: java 面试题 多线程 thread 线程池 synchronized 死锁
作者:臧圩人(zangweiren) 网址:http://zangweiren.javaeye.com
>>>转载请注明出处!<<<
线程或者说多线程,是我们处理多任务的强大工具。线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共享;而线程是运行在进程内部的,每个正在运行的进程至少有一个线程,而且不同的线程之间可以在进程范围内共享数据。也就是说进程有自己独立的存储空间,而线程是和它所属的进程内的其他线程共享一个存储空间。线程的使用可以使我们能够并行地处理一些事情。线程通过并行的处理给用户带来更好的使用体验,比如你使用的邮件系统(outlook、Thunderbird、foxmail等),你当然不希望它 |
|
[J2SE相关]JAVA面试题解惑系列(九)——继承、多态、重载和重写 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2008/10/24 17:49:01 |
关键字: java 面试题 继承 多态 重载 重写
作者:臧圩人(zangweiren) 网址:http://zangweiren.javaeye.com
>>>转载请注明出处!<<<
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承、多态、重载和重写。
继承(inheritance)
简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型。继承是面向对象的三个基本特征--封装、继承、多态的其中之一, |
|
|