- 浏览: 84716 次
- 性别:
- 来自: 北京
-
最新评论
-
wishjlucky:
分析得很详细
ognl.OgnlException: target is null for setProperty(null, "description", [Ljava.l -
onlydo:
只看到发送邮件,收邮件在哪里?
Spring邮件收发
文章列表
倒计时器,某个线程可以等待这个倒计时指向0的时候开始执行:
final CountDownLatch cdl = new CountDownLatch(10);
for(int i = 0;i<10;i++){
final int index = i;
new Thread(new Runnable(){
@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(5000));
} catch (InterruptedException e) ...
- 2014-10-18 17:04
- 浏览 595
- 评论(0)
CyclicBarrier能实现的效果是多个线程同时执行,这些线程执行的时间不一。但是要求在某一个点上,需要这些线程都执行完毕了之后,全部线程才能往下执行。下面是示例程序:
ExecutorService service = Executors.newCachedThreadPool();
final CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
for(int i = 0;i<3;i++){
Runnable runnable = new Runnable(){
Random random = ...
- 2014-10-18 16:45
- 浏览 335
- 评论(0)
Semaphore可以运行指定个数的线程同时运行某段代码,而不是一般同步情况下的一个线程。下面的程序中,10个线程运行的时候,都必须先获得到Semaphore,运行完毕之后归还Semaphore,达到限制指定个数的多个线程同时执行的效果。
final Semaphore sp = new Semaphore(3,false);
ExecutorService service = Executors.newCachedThreadPool();
for(int i = 1;i<10;i++){
final int index = i;
service.exe ...
- 2014-10-18 11:28
- 浏览 725
- 评论(0)
Lock和Condition是为了替代synchroinzed、wait、notify的,有点是更面向对象,功能上也更强大。下面是一个简单的例子:
class Outputer {
Lock lock = new ReentrantLock();
public void output(String str) {
lock.lock();
try{
for (char c : str.toCharArray()) ...
- 2014-10-18 10:57
- 浏览 620
- 评论(0)
有的时候,你可能会产生大量的线程,这些线程的执行可能是有规定的,比如同时只运行最多有3个线程在执行,这种情况就可以使用线程执行器。线程执行器的分为一下几种:
1)固定大小的
ExecutorService executorService = Executors.newFixedThreadPool(3);这个执行器表示不论多少个线程被装进这个执行器里面,同时在运行的最多只有3个。
2)单线程执行
ExecutorService executorService = Executors.newSingleThreadExecutor();这个和Executors.newFixed ...
- 2014-10-18 10:33
- 浏览 493
- 评论(0)
线程同步(互斥)
同步的需求是指同一段代码,一个线程在执行的时候,不能有别的线程也在执行。
为此,Java提供了锁的机制:
synchronized(lock){
// some code need synchronized
}一个线程在执行到同步代码块的时候,就需要先拿到loc ...
- 2014-10-18 10:01
- 浏览 427
- 评论(0)
最简单的需求,设定多长时间以后执行某个动作:
public class MyTimerTask extends TimerTask{
@Override
public void run() {
System.out.println("task running...");
}
}没三秒执行一次: Timer timer = new Timer();
timer.schedule(new MyTimerTask(), 3000);Timer提供不同的API实现不同的定时功能,例如:
1)定时到指定的时间执行(一次)
2)定时到指定的时间后每隔一段时间执行一次( ...
- 2014-10-18 09:21
- 浏览 641
- 评论(0)
案例:
/**
* 客户拜访计划
*
**/
@Entity
@Table(name = "cus_visit")
public class Visit {
/**
* 同行人
*/
private Set<Employee> partners;
@ManyToMany(targetEntity = Employee.class, cascade = { CascadeType.MERGE },fetch = FetchType.LAZY)
@Cascade(value = { org.hibernate.annotations.Ca ...
- 2014-09-17 14:33
- 浏览 2659
- 评论(0)
首先定义一个AbstractRoutingDataSource,Spring给我们留了这样的接口,让我们方便的定义怎么切换数据源:
public class DynamicDataSource extends AbstractRoutingDataSource {
Logger logger = Logger.getAnonymousLogger();
@Override
protected Object determineCurrentLookupKey() {
String p = "a";
try{
HttpServletReques ...
- 2014-08-22 17:56
- 浏览 1343
- 评论(0)
适配器模式中分为类适配器和对象适配器。
类适配器
继承手头现在有的类,通过调用父类(现有类)的方法来实现客户端需要的接口。
客户端想要的接口:
package com.oozinoz.simulation;
/**
* 火箭模拟
* 这是一个客户端已经使 ...
- 2014-07-28 21:33
- 浏览 567
- 评论(0)
之前一直用多对一,即使是一对一也转换成多对一方式解决。今天逃不了要用一对一还是费了点功夫才搞定。
多对一关联关系的配置上,在两边分配配置多对一和一对多就行了。但是一对一的时候,两边都是@OneToOne,那么这个外键究竟会放到哪个表里面呢?当然,在实际意义来说,放在哪个表里面都合理。但是在Hibernate的配置上就应该是确定在某一张表的。在JPA的官方文档中有这样的说明:
mappedBy
public abstract java.lang.String mappedBy
(Optional) The field that owns the relationship. This e ...
- 2014-07-18 15:25
- 浏览 817
- 评论(0)
/**
* 据说著名犹太历史学家 Josephus有过以下的故事:
* 在罗马人占领乔塔帕特後,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被人抓到,
* 于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,
* 直到所有人都自杀身亡为止。
* 然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,
* 于是逃过了这场死亡游戏。
*
*/
public class JosephusProblem {
...
- 2014-05-24 10:45
- 浏览 500
- 评论(0)
队列接口定义,和栈接口一样:
public interface Queue<Item> {
/**
* 添加一个元素
* @param item
*/
public void push(Item item);
/**
* 获取最后一个添加的元素,并将其从队列中删除
* @return
*/
public Item pop();
/**
* 判断队列是否为空
* @return
*/
public boolean isEmpty();
/**
* 获取队列当前的元素个数
* @return
*/
pub ...
- 2014-05-18 18:08
- 浏览 879
- 评论(0)
栈接口定义:
public interface Stack<Item> {
/**
* 添加一个元素
* @param item
*/
public void push(Item item);
/**
* 获取最后一个添加的元素,并将其从栈中删除
* @return
*/
public Item pop();
/**
* 判断栈是否为空
* @return
*/
public boolean isEmpty();
/**
* 获取栈当前的元素个数
* @return
*/
public int siz ...
- 2014-05-18 18:01
- 浏览 724
- 评论(0)
代码利用栈来实现算术表达式的求值功能,仅用于举例说明栈的用例,没有考虑运算符的优先级,并且要求表达式的各个部分必须用空格分隔:
package com.mycode.algorithms.stack;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class Evaluate {
static Stack<String> ops = new Stack<String>();
static Stack<Double> params = n ...
- 2014-05-18 11:32
- 浏览 1190
- 评论(0)