摘要: 1. Mybatis 中 # 与 $ 符号的区别: a. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号. 如:order by #user_id#,如果传入的值是12,那么解析成sql时的值为order by "12", 如果传入的值是name, 则解析成的sql为order by "name". (真正的order by 后面的字段是不能带引号的) b. $将传入的数据直接显示生成在sql中. (为上面的列子中,去掉引号得 order by 后面的引号) C. #方式能够很大程度防止sql注入; $方式无法防止Sql注入 d. $方式 阅读全文
posted @ 2014-02-09 16:51 yql_dragonfly 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 引用自: http://blog.csdn.net/tianhai110/article/details/6339565UML类图分为如下四种关系:1. 泛化 (Generalization) (继承是泛化的一种形式)2. 实现 (Realization) (接口与实现类) 3. 关联 (Asso... 阅读全文
posted @ 2014-02-09 15:19 yql_dragonfly 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 数组: 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难; 链表: 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。 HashMap:... 阅读全文
posted @ 2014-02-09 10:51 yql_dragonfly 阅读(1103) 评论(0) 推荐(0) 编辑
摘要: 我们可以通过synchronized块来同步特定的静态或非静态方法。要想实现这种需求必须为这些特性的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传入synchronized块。下面的代码演示了如何同步特定的类方法: 1 package com.fly.data; 2 3 public class SyncThread extends Thread { 4 5 private static String sync = ""; 6 private String methodType = ""; 7 8 . 阅读全文
posted @ 2014-02-08 16:09 yql_dragonfly 阅读(330) 评论(0) 推荐(0) 编辑
摘要: synchronized关键字有两种用法。第一种就是在《使用Synchronized关键字同步类方法》一文中所介绍的直接用在方法的定义中。另外一种就是synchronized块。我们不仅可以通过synchronized块来同步一个对象变量, 也可以使用synchronized块来同步类中的静态方法和非静态方法。synchronized块的语法如下:public void method(){ … … synchronized(表达式) { … … }}一、非静态类方法的同步从《使用Synchronized关键字同步类方法》一文中我们知道使用synchroni... 阅读全文
posted @ 2014-02-08 15:06 yql_dragonfly 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 要想解决“脏数据”的问题,最简单的方法就是使用synchronized关键字来使run方法同步,代码如下:public synchronized void run(){ ... }从上面的代码可以看出,只要在void和public之间加上synchronized关键字,就可以使run方法同步,也就是说,对于同一个Java类的对象实例,run方法同时只能被一个线程调用,并当前的run执行完后,才能被其他的线程调用。即使当前线程执行到了run方法中的yield方法,也只是暂停了一下。由于其他线程无法执行run方法,因此,最终还是会由当前的线程来继续执行。先看看下面的代码:sychronize... 阅读全文
posted @ 2014-02-08 11:13 yql_dragonfly 阅读(427) 评论(0) 推荐(0) 编辑
摘要: Java中的变量分为两类:局部变量和类变量。局部变量是指在方法内定义的变量,如在run方法中定义的变量。对于这些变量来说,并不存在线程之间共享的问题。因此,它们不需要进行数据同步。类变量是在类中定义的变量,作用域是整个类。这类变量可以被多个线程共享。因此,我们需要对这类变量进行数据同步。数据同步就是指在同一时间,只能由一个线程来访问被同步的类变量,当前线程访问完这些变量后,其他线程才能继续访问。这里说的访问是指有写操作的访问,如果所有访问类变量的线程都是读操作,一般是不需要数据同步的。那么如果不对共享的类变量进行数据同步,会发生什么情况呢?让我们先看看下面的代码会发生什么样的事情: 1 pac 阅读全文
posted @ 2014-02-07 22:07 yql_dragonfly 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 从线程中返回数据和向线程传递数据类似。也可以通过类成员以及回调函数来返回数据。但类成员在返回数据和传递数据时有一些区别,下面让我们来看看它们区别在哪。一、通过类变量和方法返回数据使用这种方法返回数据需要在调用start方法后才能通过类变量或方法得到数据。让我们先来看看如下例子会得到什么结果。 1 package com.fly.data; 2 3 public class MyThread3 extends Thread { 4 private String value1; 5 private String value2; 6 7 public void run()... 阅读全文
posted @ 2014-02-07 20:22 yql_dragonfly 阅读(3382) 评论(0) 推荐(0) 编辑
摘要: 在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。本文就以上原因介绍了几种用于向线程传递数据的方法,在下一篇文章中将介绍从线程中返回数据的方法。欲先取之,必先予之。一般在使用线程时都需要有一些初始化数据,然后线程利用这些数据进行加工处理,并返回结果。在这个过程中最先要做的就是向线程中传递数据。一、通过构造方法传递数据在创建线程时,必须要建立 阅读全文
posted @ 2014-02-06 11:40 yql_dragonfly 阅读(1150) 评论(0) 推荐(0) 编辑
摘要: volatile关键字相信了解Java多线程的读者都很清楚它的作用,和sychnorized 一样用于多线程的同步。volatile关键字用于声明简单类型变量,如int、float、boolean等数据类型(synchronized 用于方法或者代码段)。如果这些简单数据类型声明为volatile,对它们的操作就会变成原子级别的。但这有一定的限制。例如,下面的例子中的n就不是原子级别的: 1 package mythread; 2 3 public class JoinThread extends Thread 4 { 5 public static volatile int n ... 阅读全文
posted @ 2014-02-05 23:20 yql_dragonfly 阅读(372) 评论(0) 推荐(0) 编辑