- 浏览: 332903 次
- 性别:
- 来自: 深圳
最新评论
-
gaowei52306:
...
Ant常见属性解析--if-else -
myworkfirst:
${input.deploy.property.paths}& ...
Ant常见属性解析--foreach -
liuzl121:
顶一个 学习了
Cookie和Session专题 -
virtuallife:
正需要这个功能,试试~
Ant脚本中使用try-catch -
shutaodream:
,不错,学习
Oracle中to_char函数的用法
文章列表
Oracle提供两种验证方式,一种是OS验证,另一种密码文件验证方式
第一种方式的修改
1、控制面板->管理工具->服务 中打开
OracleOraHome92TNSListener服务
和OracleServiceORACLE(ORACLE可能在具体的系统中名称不一样,他与你装Oracle时指定的名称有关)服务
2、打开命令行,在命令行中输入:
sqlplus "/ as sysdba"
注意:以上的引号是必不可少的
*上指示的ORACLE就是服务名即OracleService后面的部分
3、在SQL>后面输入:
alter us ...
- 2009-07-27 20:16
- 浏览 2825
- 评论(0)
AOP概念
首先让我们从定义一些重要的AOP概念开始。这些术语不是Spring特有的。 不幸的是,AOP术语并不是特别的直观;如果Spring使用自己的术语,将会变得更加令人困惑。
切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @Aspect 注解(@AspectJ风格)来实现。
连接点(Joinpoint): 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在Spring AOP中,一个连接点 ...
- 2009-07-04 11:17
- 浏览 809
- 评论(0)
http://www.iteye.com/topic/353208
http://www.iteye.com/topic/281611
http://test.52crack.com/media/nb.mp3
http://www.blogjava.net/beansoft/archive/2009/06/22/283519.html
- 2009-07-03 10:37
- 浏览 703
- 评论(0)
JAVA 多线程文章系列[枫叶 KR 整理]
精通LINUX&UNIX Shell程序设计.pdf
- 2009-05-31 14:53
- 浏览 873
- 评论(0)
思考
java的synchronized提供了最底层的物理锁,要在synchronized的基础上,实现自己的逻辑锁,就必须仔细设计ReadWriteLock。
Q: lock.readLock()为什么不放入try{ } 内?
A: 因为readLock()会抛出InterruptedException,导致readingThreads++不执行,而readUnlock()在finally{ } 中,导致readingThreads--执行,从而使readingThread状态出错。writeLock()也是类似的。
Q: preferWrite有用吗?
A: 如果去掉preferWri ...
- 2009-05-31 14:33
- 浏览 1000
- 评论(0)
我们启动了5个读线程和2个写线程,运行结果如下:
Thread-0 waiting for read...
Thread-1 waiting for read...
Thread-2 waiting for read...
Thread-3 waiting for read...
Thread-4 waiting for read...
Thread-5 waiting for write...
Thread-6 waiting for write...
Thread-4 reads data: AAAAAAAAAA
Thread-3 reads data: AAAAAAAAAA
Thread ...
- 2009-05-31 14:33
- 浏览 990
- 评论(0)
readLock()用于获得读锁,readUnlock()释放读锁,writeLock()和writeUnlock()一样。由于锁用完必须释放,因此,必须保证lock和unlock匹配。我们修改DataHandler,加入ReadWriteLock:
package com.crackj2ee.thread;
public class DataHandler {
// store data:
private char[] buffer = "AAAAAAAAAA".toCharArray();
// lock:
private ReadWri ...
- 2009-05-31 14:31
- 浏览 1126
- 评论(0)
线程读写同一个对象的数据是很普遍的,通常,要避免读写冲突,必须保证任何时候仅有一个线程在写入,有线程正在读取的时候,写入操作就必须等待。简单说,就是要避免“写-写”冲突和“读-写”冲突。但是同时读是允许的,因为“读-读”不冲突,而且很安全。
要实现以上的ReadWriteLock,简单的使用synchronized就不行,我们必须自己设计一个ReadWriteLock类,在读之前,必须先获得“读锁”,写之前,必须先获得“写锁”。举例说明:
DataHandler对象保存了一个可读写的char[]数组:
package com.crackj2ee.thread;
public class ...
- 2009-05-31 14:30
- 浏览 1315
- 评论(0)
最后,Main负责完成main()方法:
package com.crackj2ee.thread;
public class Main {
public static void main(String[] args) {
TaskQueue queue = new TaskQueue();
ThreadPool pool = new ThreadPool(queue);
for(int i=0; i<10; i++) {
queue.putTask(new CalculateTask());
...
- 2009-05-31 14:28
- 浏览 775
- 评论(0)
最后,Main负责完成main()方法:
package com.crackj2ee.thread;
public class Main {
public static void main(String[] args) {
TaskQueue queue = new TaskQueue();
ThreadPool pool = new ThreadPool(queue);
for(int i=0; i<10; i++) {
queue.putTask(new CalculateTask());
...
- 2009-05-31 14:28
- 浏览 713
- 评论(0)
终于到了真正的WorkerThread,这是真正执行任务的服务器线程:
package com.crackj2ee.thread;
public class WorkerThread extends Thread {
private static int count = 0;
private boolean busy = false;
private boolean stop = false;
private TaskQueue queue;
public WorkerThread(ThreadGroup group, TaskQueue queue) ...
- 2009-05-31 14:27
- 浏览 842
- 评论(0)
前面谈了多线程应用程序能极大地改善用户相应。例如对于一个Web应用程序,每当一个用户请求服务器连接时,服务器就可以启动一个新线程为用户服务。
然而,创建和销毁线程本身就有一定的开销,如果频繁创建和销毁线程,CPU和内存开销就不可忽略,垃圾收集器还必须负担更多的工作。因此,线程池就是为了避免频繁创建和销毁线程。
每当服务器接受了一个新的请求后,服务器就从线程池中挑选一个等待的线程并执行请求处理。处理完毕后,线程并不结束,而是转为阻塞状态再次被放入线程池中。这样就避免了频繁创建和销毁线程。
Worker Pattern实现了类似线程池的功能。首先定义Task接口:
package com.c ...
- 2009-05-31 14:25
- 浏览 737
- 评论(0)
服务器线程在红色部分可能会阻塞,也就是说,Queue.getRequest是一个阻塞方法。这和java标准库的许多IO方法类似。
最后,写一个Main来启动他们:
package com.crackj2ee.thread;
public class Main {
public static void main(String[] args) {
Queue queue = new Queue();
ServerThread server = new ServerThread(queue);
server.start();
...
- 2009-05-31 14:23
- 浏览 747
- 评论(0)