- 浏览: 850609 次
- 性别:
- 来自: 南京
-
最新评论
-
loveseed1989:
您好,我用您的方法运行Cone.java,会给我报java.l ...
vtk学习笔记 --- 编译vtk库和java库 -
60love5:
60love5 写道首先谢谢你的解析,但你这个验证可见性的小程 ...
多线程中共享对象的可见性 -
60love5:
首先谢谢你的解析,但你这个验证可见性的小程序是存在问题的,你的 ...
多线程中共享对象的可见性 -
Gamehu520:
...
java 中的Unsafe -
shanpao1234560:
这个list不是静态的第一种情况下也会有线程安全的问题么,求指 ...
一个看似线程安全的示例
文章列表
参考书籍:《Oracle.Streams.11g数据复制》
要求:使用Oracle Streams捕获某个用户下部分表的DML操作变更,并通过Oracle的AQ(高级队列)对外发布,然后Java端通过JMS来获取变更,并执行后续同步操作。
Java部分:
1、jms配置信息
jms.local.username=strmadmin
jms.local.password=strmadmin
jms.local.jdbcUrl=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jms.local.queueName=jms_queue
jms.local.agentName=jms_a ...
要求:使用Oracle Streams捕获某个用户下部分表的DML操作变更,并通过Oracle的AQ(高级队列)对外发布,然后Java端通过JMS来获取变更,并执行后续同步操作。
数据库部分:
1、使用Streams要求Oracle以归档模式运行,归档日志默认存放在DB_RECOVERY_FILE_DEST指定的位置,由于该区域有大小限制,
所以,为了避免空间不足导致的后续问题,首先需要修改Oracle归档日志目录
alter system set log_archive_dest='/home/dev/app/dev/oradata/archivelog';
...
在编写存储过程时,一般情况直接调试,或者使用dbms_output.putline等来输出日志信息,便于诊断错误等。
但在有些时候,上面的方法就不行了。比如某些作为回调而编写的存储过程。
这时,可以采用oracle提供的utl_file接口,来将调试信息等写入文件,便于后期查看。
基本操作:
首先创建Oracle目录utl,指定目录位置,也即日志存放目录:
CREATE DIRECTORY utl AS '/home/dev/app/dev/util';
授权:
GRANT EXECUTE ON ...
需求:实现Oracle数据库表记录变更后的准实时同步。
可选方案:
1、基于时间戳来检测变更
要求:
a、需同步的表均需要添加时间戳字段,并在更改数据后,同步更新时间戳
b、对于删除操作,需要额外处理。或通过触发器记录,或者不真实删除记录,仅仅设置删除标记。
c、业务层编码实现同步
缺点:
对系统增加了额外约束
同步的实时性取决于轮训的时间间隔
2、基于触发器来记录变更
要求:
a、对于所有同步的表,均需要编写触发器
b、可基于dblink直接将变更应用到远程数据库
c、或触发器将变更统一记录到一张表中,然后业务层编码实 ...
1、Scala官网:http://www.scala-lang.org/
2、Scala style:http://docs.scala-lang.org/style/
3、Twitter Effective Scala:http://twitter.github.io/effectivescala/index-cn.html
4、Scala Course:http://www.scalacourses.com/
5、Twitter 课堂:http://twitter.github.io/scala_school/zh_cn/index.html
6、Scala best prac ...
好久没更新博客了!
最近,由于项目要求,需要将swing开发的一个桌面程序转换为Applet并嵌入到web中。转换工作很快就完成了,但是在嵌入到web以后,每次访问applet都会弹出一个警告对话框,大体的意思说是applet包含了不受信的代码,提示你是否要阻止运行,如果不细看提示,很容易就点击了是,结果applet就不会运行了。
通过看对话框中的提示,对applet中的所有jar都进行了签名,再次访问还是出现了警告对话框,再看,发现提示说applet中包含了签名和未签名的代码(资源)。我们知道java的签名只会对jar包中的class进行签名,而不会对其中的资源文件进行签名 ...
java虚拟机总结思维导图:
参考《深入理解java虚拟机》
java虚拟机字节码执行引擎思维导图总结:
参考《深入理解java虚拟机》
java垃圾回收相关总结:
参考《深入理解java虚拟机》
在《java并发编程实战》这本书的第十六章中讲到不安全的发布时,给了一个不安全的延迟初始化示例:
public class UnsafeLazyInitialization {
private static Resource resource;
public static Resource getInstance() {
if (resource == null)
...
何为同步容器:可以简单地理解为通过synchronized来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。比如Vector,Hashtable,以及Collections.synchronizedSet,synchronizedList等方法返回的容器。
可以通过查看V ...
在《java并发编程实战》第四章4.4.1节给出了一个程序示例:
@NotThreadSafe
class BadListHelper <E> {
public List<E> list = Collections.synchronizedList(new ArrayList<E>());
public synchronized boolean putIfAbsent(E x) {
boolean absent = !list.contains(x);
if (absent)
...
在看一些代码的时候,会发现在定义long型和double型的变量时,会在前面加上volatile关键字,当然也会看到在其它原子类型的变量前加上这个关键字,但这里要说的还是有区别的。
在java中,java的内存模型要求,变量的读取操作和写入操作都必须是原子操作的,但是对于非volatile类型的long和double有些不同,因为这两个变量是64位存储,JVM允许将64位的读操作或写操作分解为2个32位的操作。这样,当在多线程环境中读取一个非volatile的long变量时,可能会出现读取到这个变量一个值的高32位和另一个值的低32位,从而导致数据出问题。
这里还需要说明下 ...
在阅读《java并发编程实战》的第三章的时候,看到书中的一个例子,随在Eclipse中执行看看效果。示例代码如下:
public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
public void run() {
while(!ready) {
Thread.yield();
}
System.out.pri ...