- 浏览: 80197 次
- 性别:
- 来自: 北京
最新评论
-
boingboi:
请问为什么把th2换成(cs1)之后,th2打印出来的不是 a ...
java线程《三》关于synchronized,对象锁的理解
文章列表
24.2 解决方案
24.2.1 桥接模式来解决
用来解决上述问题的一个合理的解决方案,就是使用桥接模式。那么什么是桥接模式呢?
(1)桥接模式定义
(2)应用桥接模式来解决的思路
仔细分析上面的示例,根据示例的功能 ...
24.1 场景问题
24.1.1 发送提示消息
考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。
从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是在消息上添加加急,而特急消息除了添加特急外,还会做一条催促的记录,多久不完成会继续催促。从发送消息的手段上看,又有系统内短消息、手机短消息、邮件等等。
现在要实现这样的发送提示消息的功能,该如何实现呢?
24.1.2 不用模式的解决方案
1:实现简化版本
先考虑实现一个简单点的版本, ...
25.2 解决方案
25.2.1 访问者模式来解决
用来解决上述问题的一个合理的解决方案,就是使用访问者模式。那么什么是访问者模式呢?
(1)访问者模式定义
(2)应用访问者模式来解决的思路
仔细分析上面的示例,对于客 ...
25.1 场景问题
25.1.1 扩展客户管理的功能
考虑这样一个应用:扩展客户管理的功能。
既然是扩展功能,那么肯定是已经存在一定的功能了,先看看已有的功能:公司的客户分成两大类,一类是企业客户,一类是个人客户,现有的功能非常简单,就是能让客户提出服务申请。目前的程序结构如图25.1所示:
图25.1 已有的客户管理程序结构示意图
现有的实现很简单,先看看Customer的实现,示例代码如下:
/**
* 各种客户的父类
*/
public
继续研磨设计模式,来个简单的
简单工厂
简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧。 为了保持一致 ...
最近上班轻松,看看设计模式啥的,看到桥接模式,有些心得,写下来以便以后回忆回忆。
桥接模式的好处就不多说了,无非就是实现和抽象分离,各自变化等。
进入主题吧:
个人理解桥接模式:
比如蜡笔,和毛笔这两个东西,如果用蜡笔画画,我们知道蜡笔的颜色和蜡笔本身是偶会在一起的,不像毛笔,毛笔本身是没有颜色的,如果我要画画,需要12种颜色,型号有大中小,那么就需要36支蜡笔,而反观毛笔,我只需要12种颜料,然后大中小三种毛笔类型,如果我们用面向对象思想来设计,那么蜡笔需要36个类,而毛笔只需要15个类。为什么会出现这种情况呢?
...
spring下配置多数据源
- 博客分类:
- Spring
前言:
做一个移动应用的后台服务器,涉及到多数据库,以及数据库集群配置:数据源用spring管理,中间封装了自己的jdbc
看配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
...
log4j 项目中使用
- 博客分类:
- java
前言:log4j 的基本配置就介绍了,在这里只讲实际中使用.根据配置文件解释问题
1.使用配置文件log4j.xml 配置日志信息:
log4j.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" ...
前言:最近在复习数据结构,又偶遇kmp,居然没感觉了,理不出思路,特别是对next[]函数的求解更没感觉,于是静下心花了2天时间,细细重新理解了一遍,这篇文章仅当自己在学习kmp过程中的一点感悟,或许不一定理解的完全透彻,只是在记录我学习过程中思维的灵感,以便今后回来感受。好了废话不多说了,直接进入正题。
1.什么是kmp?
它是一种字符串匹配算法。与以往字符串匹配算法的区很简单就是,kmp算法中主串的i值不回溯,子串的j值每次回溯不一定从0开始,它每次回溯值j = next[j].看下面的图就能一清二楚了。
有了这个两个图:就很容易理解kmp ...
java线程简单模拟交通灯
- 博客分类:
- java
最近温习多线程通信,所以用多线程简单模拟了交通灯,感觉自己对线程方面的东西又有了进一步的理解。
通过这个模拟明白了notify(),与wait()又一些特点。
下面将代码贴上:
交通灯类:
package com.xxg.entiry;
public class Light {
public int num = 20;// 南北方向和东西方向总计时间为20秒
public String color;
public Light(String color){
this.color = color;
}
public synch ...
- 2012-08-04 20:12
- 浏览 1329
- 评论(0)
java线程之间通信<四>
- 博客分类:
- java
在同步方法中,线程间的通信主要依靠wait(),notify(),notifyAall(),来实现。
这三个方法必须在synconized 代码块中使用。
下面这段话引用网上:
引用 wait()方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入Synchronized数据块,当前线程被放入对象等待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。
notifyAll()则从对象等待池中移走所有等待那个对象的线程并 ...
要想很好的理解synchronized 必须理解好什么是对象锁。
关于对象锁的理解:
刚开始真的有点难理解这个对象锁的概念,在网上搜了一大堆,感觉还是不怎么清晰。今天在次理解了下对象锁,突然发现这个对象锁并不难理解,关键是你要明白这个对象指的是什么? [size=medium]其实这个对象指的是拥有synchronized修饰的函数,或者是代码块的一个类的实例。 当某个线程访问该类的方法或synchronized修饰的代码快时,就获得该对象的锁,其他线程就无法获得该对象的锁,也就是说这个对象已经被前一个线程所占用,另外的线程无法得到该对象,所以该对象对应的方法也就无法访问,必须等到前一 ...
java线程同步<二>
- 博客分类:
- java
为了解决 线程安全问题,也就是多个线程访问同一个实例变量,而引入了同步的概念。
不加同步的代码块:
package com.xxg.reflect;
public class Test3 {
public static void main(String[] args) {
CSD cs = new CSD();
Thread th1 = new Thread ...
java线程安全<一>
- 博客分类:
- java
java线程安全分主要分2快
1.实例变量且为单例模式为非线程安全,实例变量不为单例则线程安全
2.局部变量线程安全。
实例变量线程模拟
public class Test1 {
public static void main(String[] args) {
B b = new B();
Thread th1 = ...
spring 依赖注入的几种类型<一>
- 博客分类:
- Spring
spring 依赖注入:
关于ioc依赖注入方式,解决了在java程序中使用new 方式来产生对象,实现了解耦。
下面将结合代码 实现类对应属性与配置文件的映射,对于list,map,等属性映射做了测试。
下面bean 代码只下了属性,构造函数以及set,get 方法省略
public class StudentBean {
private int id;
private String name;
private BoxBean box; // 对象类型映射
public int getId() {
return id;
}
public void ...